xGD - eXternal Graphics Device
RForge.net

xGD

About xGD
SVN access
Download/Files
Check results

About xGD
What is xGD?
        

xGD is a package for R (see www.r-project.org) providing an eXternal Graphics Device, that is a way of passing R graphics drawing requests to an external application. The current implementation uses TCP/IP to connect to a server application, which can display or otherwise handle the graphics sent by R. You will also find a XGD server written in pure Java and implementing all currently known graphics device capabilities.

What's new?
2006/12/08 xGD has moved to RForge.net and thus can be installed using
  install.packages("xGD",,"http://rforge.net",type="source").
2004/03/27 First public release of xGD 0.1-1
Download and Release notes
The source package can be installed from the RoSuDA package repository or alternatively by downloading the sources manually:
Package sources: xGD_0.1-2.tar.gz
XGD Java server sources: XGDserver.java

The package requires R 1.9.0 or later. The package itself is considered beta and is more likely to be useful for developers than end users. If you want a Java graphics device, use JavaGD instead.

Known bugs in 0.1-1: Window resizing is not handled automatically yet - "reloadXGD" for the specific device has to be called if manual resize is to take place. Also the current version produces a lot of debugging output.

Documentation, technical details
The only available documentation at the moment is the help page in R and the commented sources in the package.

The communication over TCP/IP is message-based, i.e. each GE command in R is sent as a message to the application. The parameters correspond 1:1 to the parameters passed by R. All commands and parameter structures are defined in the src/xGDprot.h file. The endianess of int/double values is defined by the client machine (i.e. the one running the xGD package) and is evident from the initial 16-byte packet sent by the client which is defined as follows (int is always 4 bytes long):

int ID = 0x58474431;
int version; /* currently 0x0100 */
int res1,res2; /* reserved 0,0 */
For PPC-endian machines the ID corresponds to the sequence of bytes: 'XGD1', on Intel this corresponds to '1DGX'.

xGD was developed by Simon Urbanek, but anyone interested is welcome to contribute since the package is released under GPL.