Peter Hutterer [Fri, 2 Oct 2009 01:38:12 +0000 (11:38 +1000)]
inputproto 2.0
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Thu, 1 Oct 2009 06:47:11 +0000 (16:47 +1000)]
Add XIproto.txt
This is the XI protocol specification document that used to be in xorg-docs.
It's now moved here, and if it ever sees updates, the updates will only
apply to here.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Fri, 2 Oct 2009 01:31:13 +0000 (11:31 +1000)]
Require macros 1.3 for XORG_DEFAULT_OPTIONS
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Fri, 21 Aug 2009 04:25:51 +0000 (14:25 +1000)]
inputproto 1.9.99.902 (RC 2)
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Tue, 25 Aug 2009 00:04:01 +0000 (10:04 +1000)]
Device cursors are deleted once the window or the device disappear.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Fri, 21 Aug 2009 04:24:23 +0000 (14:24 +1000)]
XIWarpPointer needs to take FP1616 for positions.
This was already in the spec but the protocol itself hadn't cought up with
it.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Fri, 21 Aug 2009 03:56:11 +0000 (13:56 +1000)]
Replace four leftover INT16 with int16_t.
Peter Hutterer [Fri, 21 Aug 2009 03:55:52 +0000 (13:55 +1000)]
XIQueryPointer only works on master pointers and floating slaves.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Tue, 18 Aug 2009 05:05:09 +0000 (15:05 +1000)]
XI2proto: XIChangeCursor request requires a master pointer.
State that the server will return BadDevice in this case.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Tue, 18 Aug 2009 05:04:47 +0000 (15:04 +1000)]
XI2proto.txt: typo fix
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Fri, 7 Aug 2009 00:39:46 +0000 (10:39 +1000)]
Remove eventtype field from xXIRawEvent.
With c455db2, raw events were split up into using multiple evtypes instead
of a sub event type. The eventtype field itself however has not been removed
and was unused by both the server and the library.
Field converted into a padding field, wire layout stays the same.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Tue, 4 Aug 2009 00:43:52 +0000 (10:43 +1000)]
inputproto 1.9.99.901 (RC 1)
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Wed, 5 Aug 2009 04:52:45 +0000 (14:52 +1000)]
Revert "XI2proto.txt: grabbing a slave does not detach it anymore."
Detaching a slave device during an explicit grab makes sense from a UI
perspective. It allows a client to get exclusive access to a device without
that device's events also feeding into the respective master device.
Thanks to Thomas Jaeger for his contribution.
This reverts commit
d0b1e55b876a29a7c820ec12d7b9cb5e081e1944.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Thu, 30 Jul 2009 22:52:43 +0000 (08:52 +1000)]
XI2proto.txt: document ClientPointer in more detail.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Tue, 28 Jul 2009 01:15:12 +0000 (11:15 +1000)]
XI2proto.txt: don't put field names in quotes.
This was done inconsistently anyway so get rid of it alltogether.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Tue, 28 Jul 2009 00:12:06 +0000 (10:12 +1000)]
XI2proto.txt: typo fixes and minor clarifications.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Tue, 28 Jul 2009 01:12:50 +0000 (11:12 +1000)]
XI2proto.txt: sourceid on DeviceChanged is the device.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Tue, 28 Jul 2009 01:12:26 +0000 (11:12 +1000)]
XI2proto.txt: passive grabs can take XIAll{Master}Devices.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Tue, 28 Jul 2009 00:53:08 +0000 (10:53 +1000)]
XI2proto.txt: grabbing a slave does not detach it anymore.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Tue, 28 Jul 2009 00:38:21 +0000 (10:38 +1000)]
XIproto.txt: clarify that the ClientPointer is set, even if implicitly.
It is indistinguishable for the client whether the the server chooses a
ClientPointer or whether the CP was set through an XISetClientPointer
request. The only thing that matters is that a device was actually assigned
and will be used in the future.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Tue, 28 Jul 2009 00:10:10 +0000 (10:10 +1000)]
XI2proto.txt: padding bytes must be zero.
Padding bytes zeroed out ensures that future versions of the XI2 protcol may
use these padding bytes with a defined state. The server should ignore
padding bytes depending on the client's version anyway but better safe than
sorry.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Mon, 27 Jul 2009 05:51:17 +0000 (15:51 +1000)]
XI2proto.h: Remove special doxygen tags.
The protocol header does not include enough documentation to make the use of
doxygen really worthwile. Special doxygen tags beyond the very simple use of
/** and /**< contribute too much to the noise and make it hard to actually
read the code itself.
While no extra tags are added now, a run of doxygen over XI2proto and XI.h
still produces an acceptable output.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Mon, 27 Jul 2009 04:29:00 +0000 (14:29 +1000)]
XI2proto.txt: Add some XI1 vs. XI2 interoperability descriptions.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Mon, 27 Jul 2009 04:20:38 +0000 (14:20 +1000)]
XI2proto.txt: update list of XI2 event types.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Wed, 22 Jul 2009 02:11:13 +0000 (12:11 +1000)]
inputproto 1.9.99.15
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Mon, 20 Jul 2009 06:25:08 +0000 (16:25 +1000)]
XI2: remove Keysym grabs, use Keycode grabs instead.
Keysym grabs are tricky to get right for applications that are more
complicated than demo applications. otoh, we know keycode grabs are working.
So let's go with keycode grabs for now and add keysym grabs later when we've
sorted out the details.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Mon, 13 Jul 2009 06:05:07 +0000 (16:05 +1000)]
inputproto 1.9.99.14
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Tue, 14 Jul 2009 06:15:19 +0000 (16:15 +1000)]
Add the enter/leave detail defines, same as the core protocol ones.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Tue, 14 Jul 2009 06:15:06 +0000 (16:15 +1000)]
Formatting fix, s/tabs/spaces/
Daniel Stone [Mon, 13 Jul 2009 06:49:33 +0000 (16:49 +1000)]
Device{,Raw}Event: Add flags field.
Add a flags member to DeviceEvent and DeviceKeyEvent; the only currently
defined flag is KeyRepeat, indicating a repeat event (a la XKB detectable
autorepeat), which is only valid for key events.
Signed-off-by: Daniel Stone <daniel@fooishbar.org>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Mon, 13 Jul 2009 05:30:50 +0000 (15:30 +1000)]
XI2: Split up raw events into multiple event types.
Instead of a single XI_RawEvent type with subtypes to represent the actual
event, split up the event into XI_RawButtonPress, XI_RawButtonRelease, etc.
This way clients can select for specific raw events only instead of all of
them at once.
Note that raw events may be selected on master devices too, the server will
route them through master devices.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Mon, 13 Jul 2009 04:37:13 +0000 (14:37 +1000)]
Fix XIMaskLen macro.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Sun, 12 Jul 2009 06:19:19 +0000 (16:19 +1000)]
inputproto 1.9.99.13
Peter Hutterer [Tue, 23 Jun 2009 11:01:27 +0000 (21:01 +1000)]
Add effective group and modifiers to XIGroupInfo/XIModifierInfo.
Effective modifiers are easy to calculate but let's send them down the wire
nonetheless. Effective group is slightly more complicated since group
wrapping must be taken into account - sending it down the wire simplifies
clients.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Wed, 17 Jun 2009 14:29:44 +0000 (00:29 +1000)]
XIDeviceChangedEvents may occur on master devices too.
Prime example is a change in the number of buttons due to the availability
of a new slave device.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Tue, 16 Jun 2009 23:09:56 +0000 (09:09 +1000)]
inputproto 1.9.99.12
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Tue, 16 Jun 2009 22:53:26 +0000 (08:53 +1000)]
Use the term 'labels' to refer to button and axes labels.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Tue, 16 Jun 2009 03:14:47 +0000 (13:14 +1000)]
Include valuator value in XIValuatorClasses
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Sat, 13 Jun 2009 22:23:56 +0000 (08:23 +1000)]
Include button state in XIButtonClasses.
Without including the state in a button class, it is impossible to know the
state of a device until this device has pressed or released another button
(and thus sends an event).
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Sun, 7 Jun 2009 07:51:04 +0000 (17:51 +1000)]
Add a source field to the class information.
In some cases it is required to know the source device of a particular
device class. In the future we might also do lazy copying of classes,
meaning that for a given device, each class may come from a different
source. Hence the source id should be included for each class.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Wed, 10 Jun 2009 05:13:03 +0000 (15:13 +1000)]
Add note that bumping XI_LASTEVENT requires changes to the server.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Wed, 10 Jun 2009 05:12:39 +0000 (15:12 +1000)]
Ensure XIAnyModifier is an unsigned int.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Fri, 12 Jun 2009 05:50:26 +0000 (15:50 +1000)]
XISelectEventsReq should use win (not window), like all requests.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Fri, 12 Jun 2009 05:50:07 +0000 (15:50 +1000)]
XI2proto: document XSetClientPointer behaviour on None window, etc.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Mon, 8 Jun 2009 05:40:21 +0000 (15:40 +1000)]
inputproto 1.9.99.11
Peter Hutterer [Mon, 8 Jun 2009 04:23:27 +0000 (14:23 +1000)]
xXIHierarchyEvent should list num_info, not num_devices.
The structures following the request are referred to as "info", having a
name of "num_devices" is misleading as the number of info structs does not
always reflect the number of devices (e.g. if a device got removed).
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Mon, 8 Jun 2009 03:31:28 +0000 (13:31 +1000)]
Rename XICreateMaster to XIAddMaster for consistency.
We use add/remove for slave devices, add/remove for the hierarchy changed
flags, so let's use add/remove to create a new device as well.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Mon, 8 Jun 2009 02:35:29 +0000 (12:35 +1000)]
Update comment referring to an old naming scheme.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Sun, 7 Jun 2009 23:51:53 +0000 (09:51 +1000)]
Document BadValue error for XIHierarchyEvents selection on devices.
These events may only be selected on the XIAllDevices fake device.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Thu, 4 Jun 2009 03:35:42 +0000 (13:35 +1000)]
XIQueryVersion may return a BadValue for major_version less than 2.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Sun, 31 May 2009 23:12:42 +0000 (09:12 +1000)]
Move the XI2 index into versions[] over to XI2.h
Peter Hutterer [Fri, 29 May 2009 03:25:32 +0000 (13:25 +1000)]
Specify modifier interactions with attached slave devices on passive grabs.
Peter Hutterer [Wed, 27 May 2009 04:12:58 +0000 (14:12 +1000)]
inputproto 1.9.99.10
Peter Hutterer [Wed, 27 May 2009 22:20:37 +0000 (08:20 +1000)]
Mirror the core enter/focus modes and add the passive grab mode.
If an enter/focus grabs activates (or deactivates), send an extra set of
enter/focus in (or leave/focus out) events to the grabbing client with mode
XIPassiveGrabNotify.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Mon, 25 May 2009 05:48:25 +0000 (15:48 +1000)]
Add Enter/FocusIn passive grabs.
Same behaviour as button/keysym grabs but triggered on enter/leave and
focus in/out events.
Peter Hutterer [Wed, 27 May 2009 03:11:49 +0000 (13:11 +1000)]
XI2proto.txt: remove one more keycode mentioning, fix typo
Peter Hutterer [Mon, 25 May 2009 02:14:12 +0000 (12:14 +1000)]
Add XIGetSelectedEvents request and reply.
Counterpart to XISelectEvents, used to retrieve event masks from the server.
Benjamin Close [Tue, 19 May 2009 01:27:03 +0000 (11:27 +1000)]
XI2proto.h: fix two comments referring to the old naming scheme.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Fri, 15 May 2009 10:14:16 +0000 (20:14 +1000)]
inputproto 1.9.99.9
Peter Hutterer [Sat, 16 May 2009 01:49:21 +0000 (11:49 +1000)]
Document naming conventions for XI2proto.h.
Peter Hutterer [Sat, 16 May 2009 01:46:44 +0000 (11:46 +1000)]
XI2proto: define Window, Cursor, Atom and Time as uint32_t.
Since we're using stdint in the rest of the file, might as well ignore
CARD32 here.
Peter Hutterer [Sat, 16 May 2009 01:31:03 +0000 (11:31 +1000)]
XI2.h: remove XI2Mask, add XISetMask and friends.
XISetMask, XIClearMask, XIMaskIsSet serve to set, clear or check a bit in
the provided array.
XIMaskLen is a macro to get the minimum length of a mask for a given event
type.
They are expected to be common ways to deal with event masks, i.e. clients
will do:
unsigned char mask[XIMaskLen(XI_ButtonRelease)] = {0};
XISetMask(mask, XI_ButtonPress)
XISetMask(mask, XI_ButtonRelease)
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Sat, 16 May 2009 01:25:49 +0000 (11:25 +1000)]
Add XIAnyButton and XIAnyKeysym.
Peter Hutterer [Thu, 14 May 2009 02:09:38 +0000 (12:09 +1000)]
XIQueryPointer needs to include sensible button/modifier state.
This includes shuffling the xXIModifierInfo and xXIGroupInfo structs to the
common structs section.
Peter Hutterer [Thu, 14 May 2009 00:29:49 +0000 (10:29 +1000)]
Add an introduction to XI2proto.txt
Peter Hutterer [Tue, 12 May 2009 09:24:31 +0000 (19:24 +1000)]
XI2proto.txt: remove more mentioning of keycode grabs
Peter Hutterer [Tue, 12 May 2009 06:51:05 +0000 (16:51 +1000)]
Remove superfluous "Device" from protocol requests and events.
Anything with prefix XI is per-device anyway.
Peter Hutterer [Tue, 12 May 2009 06:14:01 +0000 (16:14 +1000)]
Add per-device flags to XIDeviceHierarchyEvents
Peter Hutterer [Tue, 12 May 2009 03:45:48 +0000 (13:45 +1000)]
Define Cursor as CARD32.
Reported-by: Benjamin Close <benjamin.close@clearchain.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Mon, 11 May 2009 04:35:35 +0000 (14:35 +1000)]
XI2proto.h: doxygen-ify
Peter Hutterer [Mon, 11 May 2009 03:46:53 +0000 (13:46 +1000)]
XI2proto.h: s/uint32_t/Time/ where appropriate
Peter Hutterer [Thu, 7 May 2009 06:19:47 +0000 (16:19 +1000)]
Prefix all XI2 constants with "XI" -> inputproto 1.99.9.8
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Wed, 6 May 2009 06:33:34 +0000 (16:33 +1000)]
Add XI2 property requests.
Basically the same as XI 1.5, save the 16 bit deviceids.
Peter Hutterer [Sat, 25 Apr 2009 01:08:21 +0000 (11:08 +1000)]
XI2: add passive grabs.
Most notably XI2 provides keysym grabs instead of keycode grabs.
Peter Hutterer [Sat, 25 Apr 2009 00:43:43 +0000 (10:43 +1000)]
XI2 spec: Add some more Grab/Ungrab/AllowEvents documentation.
Benjamin Close [Wed, 22 Apr 2009 03:40:50 +0000 (13:10 +0930)]
Define the Cursor datasize correctly
On 64 bit machines, without Cursor defined Xlib would allocate 64 bits
rather than 32 to any structs using Cursor. This led to data not
correctly being available on the wire hence the Xserver would do strange
things. We hence define Cursor to what it should be and make sure
we undefine it after we've finished to users of XIproto.h aren't affected
Fix-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Benjamin Close <Benjamin.Close@clearchain.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Paul "TBBle" Hampson [Tue, 21 Apr 2009 23:00:14 +0000 (09:00 +1000)]
Fix typo in XI2proto.txt
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Thu, 16 Apr 2009 01:37:20 +0000 (11:37 +1000)]
Add XIAllowEvents.
Basically the same as the core protocol AllowEvents.
Peter Hutterer [Sun, 19 Apr 2009 11:33:42 +0000 (21:33 +1000)]
Change FP1616 into a single int32_t.
Peter Hutterer [Fri, 10 Apr 2009 07:31:05 +0000 (17:31 +1000)]
Add GrabDevice and UngrabDevice XI2 requests.
Peter Hutterer [Fri, 10 Apr 2009 04:56:20 +0000 (14:56 +1000)]
Revert "Add major/minor version as supported by client to GetExtensionVersionReq."
This reverts commit
f6e41306f76de966884d4b72c5fb5e5d6d534ce4.
Sending the supported version hidden in another request is potentially
dangerous, so let's not do it.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Fri, 10 Apr 2009 04:35:00 +0000 (14:35 +1000)]
XI2proto.txt: fix typo
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Fri, 10 Apr 2009 04:17:51 +0000 (14:17 +1000)]
We don't need to define KeyCode and Mask.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Fri, 10 Apr 2009 04:17:02 +0000 (14:17 +1000)]
Undef Window, Time, etc. after usage again to avoid pollution.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Peter Hutterer [Tue, 3 Mar 2009 05:15:50 +0000 (15:15 +1000)]
Remove IsFloating - we don't need this in XI 1.x anymore.
Peter Hutterer [Tue, 3 Mar 2009 05:13:22 +0000 (15:13 +1000)]
Move XI_2_Major/Minor to XI2.h
Peter Hutterer [Tue, 3 Mar 2009 06:13:05 +0000 (16:13 +1000)]
Move AttachToMaster, Floating to XI2.h
Peter Hutterer [Tue, 3 Mar 2009 05:58:24 +0000 (15:58 +1000)]
Move CH_* constants to xi2
Peter Hutterer [Wed, 4 Feb 2009 04:33:57 +0000 (14:33 +1000)]
Remove XI2 requests from XIproto.h
All requests been moved to XI2proto.h. Only ExtendedGrabDevice is gone for
good.
Peter Hutterer [Thu, 26 Feb 2009 05:22:55 +0000 (15:22 +1000)]
Bump to 1.9.99.7
Peter Hutterer [Thu, 12 Mar 2009 05:43:26 +0000 (15:43 +1000)]
Add XISetDeviceFocus and XIGetDeviceFocus requests
Peter Hutterer [Wed, 11 Mar 2009 06:32:06 +0000 (16:32 +1000)]
Add focus events
Peter Hutterer [Wed, 11 Mar 2009 03:32:09 +0000 (13:32 +1000)]
Add buttons + modifier/group information to enter/leave events.
Peter Hutterer [Wed, 11 Mar 2009 02:30:16 +0000 (12:30 +1000)]
Define FP1616 as one int16_t, one uint16_t.
Peter Hutterer [Tue, 10 Mar 2009 05:42:28 +0000 (15:42 +1000)]
ValuatorInfo moved to FP3232
Peter Hutterer [Tue, 10 Mar 2009 05:35:04 +0000 (15:35 +1000)]
Add FP3232 typedef.
Peter Hutterer [Tue, 10 Mar 2009 02:26:18 +0000 (12:26 +1000)]
XI2: remove button state from the RawEvent.
A RawEvent is supposed to represent the state posted by the device. If a
client needs button state, then the client must keep track of it.
Peter Hutterer [Thu, 26 Feb 2009 05:10:28 +0000 (15:10 +1000)]
Split CH_ChangeAttachment into CH_AttachSlave and CH_DetachSlave
CH_ChangeAttachment is still there, but won't be for long.
Peter Hutterer [Thu, 5 Feb 2009 05:57:56 +0000 (15:57 +1000)]
Add XI2.h and XI2proto.h, and a few required defines to XI.h
Peter Hutterer [Thu, 5 Feb 2009 04:18:28 +0000 (14:18 +1000)]
Add XI2 protocol specification document.