[comp.windows.x] Xlib installation

handeli@anduin.llnl.gov (09/07/90)

Installation of Xlib on NLTSS on CRAY XMP and YMP systems has been
made difficult due to the fact that the LLNL C compiler (not related
to any UNICOS
CRI-supported C compilers) does not pack bytes inside structures.
Thus, in
a typical structure such as

   struct{
	   char a;
	   char b;
	   char c[30];
	   } tt;
  
  The LLNL C compiler would put each of the three variables in
  separate 64-bit words. (Note that the c[30] is packed 8 bytes
  per word). If one uses the instead the structure
       struct {
		int a:8;
		int b:8;
		char c[30];
		};
 variables a and b will be packed in one word, but then c will be
 on a new word boundary.

 Specifically, there are five structures in Xproto.h that we have identified
 where this problem occurs. They are xSendEventReq, xGetKeyboardControl-
 Reply, xEvent, xChangePropertyReq, and xKeymapEvent. There is a 6th
 structure with the above form, but just by chance, the array part of the structure
 starts on a word boundary with no empty spaces. The question is then what
 modifications are needed to Xlib to compensate for this problem. I have
 determined at least two areas. First, there are most definitely places
 where these structures need to be packed and unpacked. We need to know
 exactly and precisely where this needs to be done. The many calls to lower
 level data communications routine complicates the determination of these
 locations. Secondly, Xlib has the SIZEOF macro which has hardwired in the
 length in bytes of these structures. SIZEOF does appear in BCOPY calls as
 well as several other cases, scattered about the Xlib sources. The question
 is then what effect will having a structure with the wrong size with spaces
 in it have on Xlib? Finally, are there any other things I haven't discovered
 yet concerning non-packed structures?