<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Courier;
        panose-1:0 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
p.p1, li.p1, div.p1
        {mso-style-name:p1;
        margin:0in;
        background:#D7D3B7;
        font-size:9.0pt;
        font-family:Courier;
        color:#3B2322;}
p.p2, li.p2, div.p2
        {mso-style-name:p2;
        margin:0in;
        background:#D7D3B7;
        font-size:9.0pt;
        font-family:Courier;
        color:#3B2322;}
span.s1
        {mso-style-name:s1;}
span.apple-converted-space
        {mso-style-name:apple-converted-space;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal">Hi,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">We’ve noticed that XDrawRectangle where the GC.line_style is LineOnOffDash has gotten slower in recent X Server releases. We’ve observed this on both Linux RH8 and FBSD 11.4 and above. There are two sample programs pasted below, one which
 draws 5 rectangles with LineSolid and one which draws 5 rectangles with LineOnOffDash. There is also a makefile for RH8. Running the two programs with an X Server version 1.18.4, both programs render the rectangles instantly. But in X Server version 1.20.8
 or more obviously 1.20.14, rendering the dashed line rectangles is much slower. You can watch them being drawn on the screen, whereas the solid line version still renders instantly.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Is there some other attribute that needs to be set when using LineOnOffDash? Or is this a bug?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks to <a href="https://rosettacode.org/wiki/Window_creation/X11">
https://rosettacode.org/wiki/Window_creation/X11</a> for the example “hello world” program.
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The only difference between hello-x.c and hello-fast.c is whether we use “dashGC” or “gc” in the first five calls to XDrawRectangle.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Source file #1: hello-x.c<o:p></o:p></p>
<p class="p1"><span class="s1">#include <X11/Xlib.h></span><o:p></o:p></p>
<p class="p1"><span class="s1">#include <stdio.h></span><o:p></o:p></p>
<p class="p1"><span class="s1">#include <stdlib.h></span><o:p></o:p></p>
<p class="p1"><span class="s1">#include <string.h></span><o:p></o:p></p>
<p class="p1"><span class="s1">#include <sys/time.h></span><o:p></o:p></p>
<p class="p2"><o:p> </o:p></p>
<p class="p1"><span class="s1">GC getSolidGC(Display *d, Window w);</span><o:p></o:p></p>
<p class="p1"><span class="s1">GC getDashGC(Display *d, Window w);</span><o:p></o:p></p>
<p class="p2"><o:p> </o:p></p>
<p class="p1"><span class="s1">int main(void) {</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">Display *d;</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">Window w;</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">XEvent e;</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">const char *msg = "Hello, World!";</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">int s;</span><o:p></o:p></p>
<p class="p2"><o:p> </o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">d = XOpenDisplay(NULL);</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">if (d == NULL) {</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">      </span><span class="s1">fprintf(stderr, "Cannot open display\n");</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">      </span><span class="s1">exit(1);</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">}</span><o:p></o:p></p>
<p class="p2"><o:p> </o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">s = DefaultScreen(d);</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">w = XCreateSimpleWindow(d, RootWindow(d, s), 10, 10, 500, 500, 1,</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">                           </span>
<span class="s1">BlackPixel(d, s), WhitePixel(d, s));</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">XSelectInput(d, w, ExposureMask | KeyPressMask);</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">XMapWindow(d, w);</span><o:p></o:p></p>
<p class="p2"><o:p> </o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">GC gc = getSolidGC(d, w);</span><o:p></o:p></p>
<p class="p2"><o:p> </o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">if (!gc)</span><span class="apple-converted-space"> </span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">    </span><span class="s1">msg = "no GC";</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">else</span><span class="apple-converted-space">     </span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">{ </span>
<span class="apple-converted-space">       </span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">        </span><span class="s1">msg = "there is a GC";</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">} </span>
<span class="apple-converted-space">       </span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">            </span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">int border = 2;</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">int x = 20;</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">int y = 20;</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">int dx = 400;</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">int dy = 200;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">            </span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">while (1) {
</span><span class="apple-converted-space"> </span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">      </span><span class="s1">XNextEvent(d, &e);</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">      </span><span class="s1">if (e.type == Expose) {</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">        </span><span class="s1">if (border)</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">        </span><span class="s1">{</span><span class="apple-converted-space">       </span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">            </span><span class="s1">int origX = x;</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">            </span><span class="s1">int origY = y;</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">            </span><span class="s1">int origDX = dx;</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">            </span><span class="s1">int newDY = dy/8;</span><span class="apple-converted-space"> </span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">         </span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">            </span><span class="s1">GC dashGC = getDashGC(d, w);</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">            </span><span class="s1">XDrawRectangle(d, w, dashGC, origX, origY, origDX, newDY);</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">            </span><span class="s1">origY += (newDY+10);</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">            </span><span class="s1">XDrawRectangle(d, w, dashGC, origX, origY, origDX, newDY);</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">            </span><span class="s1">origY += (newDY+10);</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">            </span><span class="s1">XDrawRectangle(d, w, dashGC, origX, origY, origDX, newDY);</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">            </span><span class="s1">origY += (newDY+10);</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">            </span><span class="s1">XDrawRectangle(d, w, dashGC, origX, origY, origDX, newDY);</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">            </span><span class="s1">origY += (newDY+10);</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">            </span><span class="s1">XDrawRectangle(d, w, dashGC, origX, origY, origDX, newDY);</span><o:p></o:p></p>
<p class="p1"><o:p> </o:p></p>
<p class="p2"><span class="apple-converted-space">            </span><span class="s1">while (border-- > 0)</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">            </span><span class="s1">{</span><span class="apple-converted-space"> </span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">                </span><span class="s1">XDrawRectangle(d, w, gc, x, y, dx, dy);</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">                </span><span class="s1">x++;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">                </span><span class="s1">y++;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">                </span><span class="s1">dx -= 2;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">                </span><span class="s1">dy -= 2;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">            </span><span class="s1">}</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">        </span><span class="s1">}</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">        </span><span class="s1">else</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">            </span><span class="s1">XFillRectangle(d, w, gc, x, y, dx, dy);</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">         </span><span class="s1">XDrawString(d, w, gc, 10, 400, msg, strlen(msg));</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">      </span><span class="s1">}</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">      </span><span class="s1">if (e.type == KeyPress)</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">         </span><span class="s1">break;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">   </span><span class="s1">}</span><o:p></o:p></p>
<p class="p1"><o:p> </o:p></p>
<p class="p2"><span class="apple-converted-space">   </span><span class="s1">XCloseDisplay(d);</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">   </span><span class="s1">return 0;</span><o:p></o:p></p>
<p class="p2"><span class="s1">}</span><o:p></o:p></p>
<p class="p1"><o:p> </o:p></p>
<p class="p2"><span class="s1">GC getSolidGC(Display *d, Window w)</span><o:p></o:p></p>
<p class="p2"><span class="s1">{</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">XColor exact, color;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">int scr = DefaultScreen(d);</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">XAllocNamedColor(d, DefaultColormap(d, scr), "magenta", &exact, &color);</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">/* XAllocNamedColor(d, DefaultColormap(d, scr), "red", &exact, &color); */</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">unsigned long gcmask = 0;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">XGCValues xgcv;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">xgcv.plane_mask = ~color.pixel;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">xgcv.function = GXclear;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">gcmask |= (GCPlaneMask|GCFunction);</span><o:p></o:p></p>
<p class="p1"><o:p> </o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">xgcv.line_style = LineSolid;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">gcmask |= GCLineStyle;</span><o:p></o:p></p>
<p class="p1"><o:p> </o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">GC gc = XCreateGC(d, w, gcmask, &xgcv);</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">return gc;</span><o:p></o:p></p>
<p class="p2"><span class="s1">}</span><o:p></o:p></p>
<p class="p1"><o:p> </o:p></p>
<p class="p2"><span class="s1">GC getDashGC(Display *d, Window w)</span><o:p></o:p></p>
<p class="p2"><span class="s1">{</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">XColor exact, color;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">int scr = DefaultScreen(d);</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">XAllocNamedColor(d, DefaultColormap(d, scr), "magenta", &exact, &color);</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">/* XAllocNamedColor(d, DefaultColormap(d, scr), "red", &exact, &color); */</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">unsigned long gcmask = 0;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">XGCValues xgcv;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">xgcv.plane_mask = ~color.pixel;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">xgcv.function = GXclear;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">gcmask |= (GCPlaneMask|GCFunction);</span><o:p></o:p></p>
<p class="p1"><o:p> </o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">xgcv.line_style = LineOnOffDash;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">gcmask |= GCLineStyle;</span><o:p></o:p></p>
<p class="p1"><o:p> </o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">GC gc = XCreateGC(d, w, gcmask, &xgcv);</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">return gc;</span><o:p></o:p></p>
<p class="p2"><span class="s1">}</span><o:p></o:p></p>
<p class="p1"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Source file #2: hello-fast.c<o:p></o:p></p>
<p class="p1"><span class="s1">#include <X11/Xlib.h></span><o:p></o:p></p>
<p class="p1"><span class="s1">#include <stdio.h></span><o:p></o:p></p>
<p class="p1"><span class="s1">#include <stdlib.h></span><o:p></o:p></p>
<p class="p1"><span class="s1">#include <string.h></span><o:p></o:p></p>
<p class="p1"><span class="s1">#include <sys/time.h></span><o:p></o:p></p>
<p class="p2"><o:p> </o:p></p>
<p class="p1"><span class="s1">GC getSolidGC(Display *d, Window w);</span><o:p></o:p></p>
<p class="p1"><span class="s1">GC getDashGC(Display *d, Window w);</span><o:p></o:p></p>
<p class="p2"><o:p> </o:p></p>
<p class="p1"><span class="s1">int main(void) {</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">Display *d;</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">Window w;</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">XEvent e;</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">const char *msg = "Hello, World!";</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">int s;</span><o:p></o:p></p>
<p class="p2"><o:p> </o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">d = XOpenDisplay(NULL);</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">if (d == NULL) {</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">      </span><span class="s1">fprintf(stderr, "Cannot open display\n");</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">      </span><span class="s1">exit(1);</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">}</span><o:p></o:p></p>
<p class="p2"><o:p> </o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">s = DefaultScreen(d);</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">w = XCreateSimpleWindow(d, RootWindow(d, s), 10, 10, 500, 500, 1,</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">                           </span>
<span class="s1">BlackPixel(d, s), WhitePixel(d, s));</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">XSelectInput(d, w, ExposureMask | KeyPressMask);</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">XMapWindow(d, w);</span><o:p></o:p></p>
<p class="p2"><o:p> </o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">GC gc = getSolidGC(d, w);</span><o:p></o:p></p>
<p class="p2"><o:p> </o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">if (!gc)</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">    </span><span class="s1">msg = "no GC";</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">else</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">{</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">        </span><span class="s1">msg = "there is a GC";</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">}</span><o:p></o:p></p>
<p class="p2"><o:p> </o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">int border = 2;</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">int x = 20;</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">int y = 20;</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">int dx = 400;</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">int dy = 200;</span><o:p></o:p></p>
<p class="p2"><o:p> </o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">while (1) {</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">      </span><span class="s1">XNextEvent(d, &e);</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">      </span><span class="s1">if (e.type == Expose) {</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">        </span><span class="s1">if (border)</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">        </span><span class="s1">{</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">            </span><span class="s1">int origX = x;</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">            </span><span class="s1">int origY = y;</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">            </span><span class="s1">int origDX = dx;</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">            </span><span class="s1">int newDY = dy/8;</span><o:p></o:p></p>
<p class="p2"><o:p> </o:p></p>
<p class="p1"><span class="apple-converted-space">            </span><span class="s1">GC dashGC = getDashGC(d, w);</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">            </span><span class="s1">XDrawRectangle(d, w, gc, origX, origY, origDX, newDY);</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">            </span><span class="s1">origY += (newDY+10);</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">            </span><span class="s1">XDrawRectangle(d, w, gc, origX, origY, origDX, newDY);</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">            </span><span class="s1">origY += (newDY+10);</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">            </span><span class="s1">XDrawRectangle(d, w, gc, origX, origY, origDX, newDY);</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">            </span><span class="s1">origY += (newDY+10);</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">            </span><span class="s1">XDrawRectangle(d, w, gc, origX, origY, origDX, newDY);</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">            </span><span class="s1">origY += (newDY+10);</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">            </span><span class="s1">XDrawRectangle(d, w, gc, origX, origY, origDX, newDY);</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">    </span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">            </span><span class="s1">while (border-- > 0)</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">            </span><span class="s1">{</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">                </span><span class="s1">XDrawRectangle(d, w, gc, x, y, dx, dy);</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">                </span><span class="s1">x++;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">                </span><span class="s1">y++;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">                </span><span class="s1">dx -= 2;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">                </span><span class="s1">dy -= 2;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">            </span><span class="s1">}</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">        </span><span class="s1">}</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">        </span><span class="s1">else</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">            </span><span class="s1">XFillRectangle(d, w, gc, x, y, dx, dy);</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">         </span><span class="s1">XDrawString(d, w, gc, 10, 400, msg, strlen(msg));</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">      </span><span class="s1">}</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">      </span><span class="s1">if (e.type == KeyPress)</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">         </span><span class="s1">break;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">   </span><span class="s1">}</span><o:p></o:p></p>
<p class="p1"><o:p> </o:p></p>
<p class="p2"><span class="apple-converted-space">   </span><span class="s1">XCloseDisplay(d);</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">   </span><span class="s1">return 0;</span><o:p></o:p></p>
<p class="p2"><span class="s1">}</span><o:p></o:p></p>
<p class="p1"><o:p> </o:p></p>
<p class="p2"><span class="s1">GC getSolidGC(Display *d, Window w)</span><o:p></o:p></p>
<p class="p2"><span class="s1">{</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">XColor exact, color;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">int scr = DefaultScreen(d);</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">XAllocNamedColor(d, DefaultColormap(d, scr), "magenta", &exact, &color);</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">unsigned long gcmask = 0;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">XGCValues xgcv;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">xgcv.plane_mask = ~color.pixel;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">xgcv.function = GXclear;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">gcmask |= (GCPlaneMask|GCFunction);</span><o:p></o:p></p>
<p class="p1"><o:p> </o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">xgcv.line_style = LineSolid;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">gcmask |= GCLineStyle;</span><o:p></o:p></p>
<p class="p1"><o:p> </o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">GC gc = XCreateGC(d, w, gcmask, &xgcv);</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">return gc;</span><o:p></o:p></p>
<p class="p2"><span class="s1">}</span><o:p></o:p></p>
<p class="p1"><o:p> </o:p></p>
<p class="p2"><span class="s1">GC getDashGC(Display *d, Window w)</span><o:p></o:p></p>
<p class="p2"><span class="s1">{</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">XColor exact, color;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">int scr = DefaultScreen(d);</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">XAllocNamedColor(d, DefaultColormap(d, scr), "magenta", &exact, &color);</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">unsigned long gcmask = 0;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">XGCValues xgcv;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">xgcv.plane_mask = ~color.pixel;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">xgcv.function = GXclear;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">gcmask |= (GCPlaneMask|GCFunction);</span><o:p></o:p></p>
<p class="p1"><o:p> </o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">xgcv.line_style = LineOnOffDash;</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">gcmask |= GCLineStyle;</span><o:p></o:p></p>
<p class="p1"><o:p> </o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">GC gc = XCreateGC(d, w, gcmask, &xgcv);</span><o:p></o:p></p>
<p class="p2"><span class="apple-converted-space">    </span><span class="s1">return gc;</span><o:p></o:p></p>
<p class="p2"><span class="s1">}</span><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Here’s a makefile that will work on Red Hat 8:<o:p></o:p></p>
<p class="p1"><span class="s1">default: </span><span class="apple-converted-space">   </span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">    </span><span class="s1">g++ hello-x.c -I/usr/local/include\</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">/usr/lib64/libXmu.so \</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">    </span><span class="s1">/usr/lib64/libXext.so \</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">    </span><span class="s1">/usr/lib64/libXt.so \</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">    </span><span class="s1">/usr/lib64/libX11.so \</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">         </span><span class="s1">-o hello-x</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">    </span><span class="s1">g++ hello-fast.c -I/usr/local/include\</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">   </span><span class="s1">/usr/lib64/libXmu.so \</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">    </span><span class="s1">/usr/lib64/libXext.so \</span><span class="apple-converted-space"> </span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">    </span><span class="s1">/usr/lib64/libXt.so \</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">    </span><span class="s1">/usr/lib64/libX11.so \</span><o:p></o:p></p>
<p class="p1"><span class="apple-converted-space">         </span><span class="s1">-o hello-fast</span><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal"><span style="color:black">Thanks,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:black">- Paul<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:black"> <o:p></o:p></span></p>
<p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Arial",sans-serif;color:black">Paul Farrington</span></b><span style="color:black"><o:p></o:p></span></p>
<p class="MsoNormal"><b><span style="font-size:9.0pt;font-family:"Arial",sans-serif;color:black">E:</span></b><span style="font-size:9.0pt;font-family:"Arial",sans-serif;color:#767171">  </span><u><span style="font-size:9.0pt;font-family:"Arial",sans-serif;color:blue"><a href="mailto:paul.farrington@fisglobal.com" title="mailto:paul.farrington@fisglobal.com"><span style="color:#0563C1">paul.farrington@fisglobal.com</span></a></span></u><span style="color:black"><o:p></o:p></span></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
The information contained in this message is proprietary and/or confidential. If you are not the intended recipient, please: (i) delete the message and all copies; (ii) do not disclose, distribute or use the message in any manner; and (iii) notify the sender
 immediately. In addition, please be aware that any message addressed to our domain is subject to archiving and review by persons other than the intended recipient. Thank you.
</body>
</html>