do_arcs.c revision 533545b5
1264fa531Smrg/*****************************************************************************
2264fa531SmrgCopyright 1988, 1989 by Digital Equipment Corporation, Maynard, Massachusetts.
3264fa531Smrg
4264fa531Smrg                        All Rights Reserved
5264fa531Smrg
6264fa531SmrgPermission to use, copy, modify, and distribute this software and its
7264fa531Smrgdocumentation for any purpose and without fee is hereby granted,
8264fa531Smrgprovided that the above copyright notice appear in all copies and that
9264fa531Smrgboth that copyright notice and this permission notice appear in
10264fa531Smrgsupporting documentation, and that the name of Digital not be
11264fa531Smrgused in advertising or publicity pertaining to distribution of the
12264fa531Smrgsoftware without specific, written prior permission.
13264fa531Smrg
14264fa531SmrgDIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
15264fa531SmrgALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
16264fa531SmrgDIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
17264fa531SmrgANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
18264fa531SmrgWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
19264fa531SmrgARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
20264fa531SmrgSOFTWARE.
21264fa531Smrg
22264fa531Smrg******************************************************************************/
23264fa531Smrg
24264fa531Smrg#include "x11perf.h"
25264fa531Smrg
26264fa531Smrgstatic XArc *arcs;
27264fa531Smrgstatic GC   pgc;
28264fa531Smrg
29264fa531Smrg#define DegreesToX(degrees) (degrees * 64)
30264fa531Smrg
31264fa531Smrgstatic void
32264fa531SmrgGenerateCircles(XParms xp, Parms p, Bool partialArcs, Bool ddashed)
33264fa531Smrg{
34264fa531Smrg    int     i;
35264fa531Smrg    int     rows;       /* Number of rows filled in current column	    */
36264fa531Smrg    int     x, y;       /* base of square to draw the circle in		    */
37264fa531Smrg    int     xorg, yorg; /* Used to get from column to column or row to row  */
38264fa531Smrg    int     size;
39264fa531Smrg    int     half;
40264fa531Smrg    int     startAngle, arcAngle;
41264fa531Smrg
42264fa531Smrg    if(ddashed)
43264fa531Smrg	pgc = xp->ddfggc;
44264fa531Smrg    else
45264fa531Smrg	pgc = xp->fggc;
46264fa531Smrg
47264fa531Smrg    size = p->special;
48264fa531Smrg    half = (size + 19) / 20;
49264fa531Smrg    arcs = (XArc *)malloc((p->objects) * sizeof(XArc));
50264fa531Smrg    x = xorg = half; y = yorg = half;
51264fa531Smrg    rows = 0;
52264fa531Smrg    startAngle = DegreesToX(0);
53264fa531Smrg    arcAngle = DegreesToX(360);
54264fa531Smrg
55264fa531Smrg    for (i = 0; i != p->objects; i++) {
56264fa531Smrg	arcs[i].x = x;
57264fa531Smrg	arcs[i].y = y;
58264fa531Smrg	arcs[i].width = size;
59264fa531Smrg	arcs[i].height = size;
60264fa531Smrg	arcs[i].angle1 = startAngle;
61264fa531Smrg	arcs[i].angle2 = arcAngle;
62264fa531Smrg
63264fa531Smrg	if (partialArcs) {
64264fa531Smrg	    startAngle += DegreesToX(30);
65264fa531Smrg	    if (startAngle >= DegreesToX(360)) startAngle -= DegreesToX(360);
66264fa531Smrg	    arcAngle -= DegreesToX(20);
67264fa531Smrg	    if (arcAngle <= DegreesToX(0)) arcAngle += DegreesToX(360);
68264fa531Smrg	}
69264fa531Smrg
70264fa531Smrg	y += size + 1;
71264fa531Smrg	rows++;
72264fa531Smrg	if (y >= HEIGHT - size  - half || rows == MAXROWS) {
73264fa531Smrg	    /* Go to next column */
74264fa531Smrg	    rows = 0;
75264fa531Smrg	    x += size + 1;
76264fa531Smrg	    if (x >= WIDTH - size) {
77264fa531Smrg		yorg++;
78264fa531Smrg		if (yorg >= size + half || yorg >= HEIGHT - size - half) {
79264fa531Smrg		    yorg = half;
80264fa531Smrg		    xorg++;
81264fa531Smrg		    if (xorg >= size + half || xorg >= WIDTH - size - half) {
82264fa531Smrg			xorg = half;
83264fa531Smrg		    }
84264fa531Smrg		}
85264fa531Smrg		x = xorg;
86264fa531Smrg	    }
87264fa531Smrg	    y = yorg;
88264fa531Smrg	}
89264fa531Smrg    }
90264fa531Smrg}
91264fa531Smrg
92264fa531Smrgint
93533545b5SmrgInitCircles(XParms xp, Parms p, int64_t reps)
94264fa531Smrg{
95264fa531Smrg    GenerateCircles(xp, p, False, False);
96264fa531Smrg    return reps;
97264fa531Smrg}
98264fa531Smrg
99264fa531Smrgint
100533545b5SmrgInitPartCircles(XParms xp, Parms p, int64_t reps)
101264fa531Smrg{
102264fa531Smrg    GenerateCircles(xp, p, True, False);
103264fa531Smrg    return reps;
104264fa531Smrg}
105264fa531Smrg
106264fa531Smrg
107264fa531Smrgint
108533545b5SmrgInitChordPartCircles(XParms xp, Parms p, int64_t reps)
109264fa531Smrg{
110264fa531Smrg    GenerateCircles(xp, p, True, False);
111264fa531Smrg    XSetArcMode(xp->d, xp->bggc, ArcChord);
112264fa531Smrg    XSetArcMode(xp->d, xp->fggc, ArcChord);
113264fa531Smrg    return reps;
114264fa531Smrg}
115264fa531Smrg
116264fa531Smrg
117264fa531Smrgint
118533545b5SmrgInitSlicePartCircles(XParms xp, Parms p, int64_t reps)
119264fa531Smrg{
120264fa531Smrg    GenerateCircles(xp, p, True, False);
121264fa531Smrg    XSetArcMode(xp->d, xp->bggc, ArcPieSlice);
122264fa531Smrg    XSetArcMode(xp->d, xp->fggc, ArcPieSlice);
123264fa531Smrg    return reps;
124264fa531Smrg}
125264fa531Smrg
126264fa531Smrgstatic void
127264fa531SmrgGenerateWideCircles(XParms xp, Parms p, Bool partialArcs, Bool ddashed)
128264fa531Smrg{
129264fa531Smrg    int	    size;
130264fa531Smrg
131264fa531Smrg    GenerateCircles(xp, p, partialArcs, ddashed);
132264fa531Smrg
133264fa531Smrg    size = p->special;
134264fa531Smrg    if(ddashed) {
135264fa531Smrg	XSetLineAttributes(xp->d, xp->ddbggc, (int) ((size + 9) / 10),
136264fa531Smrg	    LineSolid, CapRound, JoinRound);
137264fa531Smrg	XSetLineAttributes(xp->d, xp->ddfggc, (int) ((size + 9) / 10),
138264fa531Smrg	    LineSolid, CapRound, JoinRound);
139264fa531Smrg    }
140264fa531Smrg    else {
141264fa531Smrg	XSetLineAttributes(xp->d, xp->bggc, (int) ((size + 9) / 10),
142264fa531Smrg	    LineSolid, CapRound, JoinRound);
143264fa531Smrg	XSetLineAttributes(xp->d, xp->fggc, (int) ((size + 9) / 10),
144264fa531Smrg	    LineSolid, CapRound, JoinRound);
145264fa531Smrg    }
146264fa531Smrg}
147264fa531Smrg
148264fa531Smrgint
149533545b5SmrgInitWideCircles(XParms xp, Parms p, int64_t reps)
150264fa531Smrg{
151264fa531Smrg    GenerateWideCircles (xp, p, False, False);
152264fa531Smrg    return reps;
153264fa531Smrg}
154264fa531Smrg
155264fa531Smrgint
156533545b5SmrgInitPartWideCircles(XParms xp, Parms p, int64_t reps)
157264fa531Smrg{
158264fa531Smrg    GenerateWideCircles (xp, p, True, False);
159264fa531Smrg    return reps;
160264fa531Smrg}
161264fa531Smrg
162264fa531Smrgint
163533545b5SmrgInitDashedCircles(XParms xp, Parms p, int64_t reps)
164264fa531Smrg{
165264fa531Smrg    char dashes[2];
166264fa531Smrg
167264fa531Smrg    GenerateCircles(xp, p, False, False);
168264fa531Smrg
169264fa531Smrg    /* Modify GCs to draw dashed */
170264fa531Smrg    XSetLineAttributes(xp->d, xp->bggc, 0, LineOnOffDash, CapButt, JoinMiter);
171264fa531Smrg    XSetLineAttributes(xp->d, xp->fggc, 0, LineOnOffDash, CapButt, JoinMiter);
172264fa531Smrg    dashes[0] = 3;   dashes[1] = 2;
173264fa531Smrg    XSetDashes(xp->d, xp->fggc, 0, dashes, 2);
174264fa531Smrg    XSetDashes(xp->d, xp->bggc, 0, dashes, 2);
175264fa531Smrg    return reps;
176264fa531Smrg}
177264fa531Smrg
178264fa531Smrgint
179533545b5SmrgInitWideDashedCircles(XParms xp, Parms p, int64_t reps)
180264fa531Smrg{
181264fa531Smrg    int		size;
182264fa531Smrg    XGCValues   gcv;
183264fa531Smrg    char	dashes[2];
184264fa531Smrg
185264fa531Smrg    GenerateWideCircles(xp, p, False, False);
186264fa531Smrg    size = p->special;
187264fa531Smrg    size = (size + 9) / 10;
188264fa531Smrg
189264fa531Smrg    /* Modify GCs to draw dashed */
190264fa531Smrg    dashes[0] = 2*size;   dashes[1] = 2*size;
191264fa531Smrg    gcv.line_style = LineOnOffDash;
192264fa531Smrg    XChangeGC(xp->d, xp->fggc, GCLineStyle, &gcv);
193264fa531Smrg    XChangeGC(xp->d, xp->bggc, GCLineStyle, &gcv);
194264fa531Smrg    XSetDashes(xp->d, xp->fggc, 0, dashes, 2);
195264fa531Smrg    XSetDashes(xp->d, xp->bggc, 0, dashes, 2);
196264fa531Smrg    return reps;
197264fa531Smrg}
198264fa531Smrg
199264fa531Smrgint
200533545b5SmrgInitDoubleDashedCircles(XParms xp, Parms p, int64_t reps)
201264fa531Smrg{
202264fa531Smrg    char dashes[2];
203264fa531Smrg
204264fa531Smrg    GenerateCircles(xp, p, False, True);
205264fa531Smrg
206264fa531Smrg    /* Modify GCs to draw dashed */
207264fa531Smrg    XSetLineAttributes(xp->d, xp->ddbggc, 0, LineDoubleDash, CapButt, JoinMiter);
208264fa531Smrg    XSetLineAttributes(xp->d, xp->ddfggc, 0, LineDoubleDash, CapButt, JoinMiter);
209264fa531Smrg    dashes[0] = 3;   dashes[1] = 2;
210264fa531Smrg    XSetDashes(xp->d, xp->ddfggc, 0, dashes, 2);
211264fa531Smrg    XSetDashes(xp->d, xp->ddbggc, 0, dashes, 2);
212264fa531Smrg    return reps;
213264fa531Smrg}
214264fa531Smrg
215264fa531Smrgint
216533545b5SmrgInitWideDoubleDashedCircles(XParms xp, Parms p, int64_t reps)
217264fa531Smrg{
218264fa531Smrg    int		size;
219264fa531Smrg    XGCValues   gcv;
220264fa531Smrg    char	dashes[2];
221264fa531Smrg
222264fa531Smrg    GenerateWideCircles(xp, p, False, True);
223264fa531Smrg    size = p->special;
224264fa531Smrg    size = (size + 9) / 10;
225264fa531Smrg
226264fa531Smrg    /* Modify GCs to draw dashed */
227264fa531Smrg    dashes[0] = 2*size;   dashes[1] = 2*size;
228264fa531Smrg    gcv.line_style = LineDoubleDash;
229264fa531Smrg    XChangeGC(xp->d, xp->ddfggc, GCLineStyle, &gcv);
230264fa531Smrg    XChangeGC(xp->d, xp->ddbggc, GCLineStyle, &gcv);
231264fa531Smrg    XSetDashes(xp->d, xp->ddfggc, 0, dashes, 2);
232264fa531Smrg    XSetDashes(xp->d, xp->ddbggc, 0, dashes, 2);
233264fa531Smrg    return reps;
234264fa531Smrg}
235264fa531Smrg
236264fa531Smrgstatic void
237264fa531SmrgGenerateEllipses(XParms xp, Parms p, int partialArcs, Bool ddashed)
238264fa531Smrg{
239264fa531Smrg    int     size;
240264fa531Smrg    int     half;
241264fa531Smrg    int     rows;       /* Number of rows filled in current column	    */
242264fa531Smrg    int     i;
243264fa531Smrg    int     x, y;	    /* base of square to draw ellipse in	    */
244264fa531Smrg    int     vsize, vsizeinc;
245264fa531Smrg    int     dir;
246264fa531Smrg    int     startAngle, arcAngle;
247264fa531Smrg
248264fa531Smrg    if(ddashed)
249264fa531Smrg	pgc = xp->ddfggc;
250264fa531Smrg    else
251264fa531Smrg	pgc = xp->fggc;
252264fa531Smrg
253264fa531Smrg    size = p->special;
254264fa531Smrg    half = (size + 19) / 20;
255264fa531Smrg    arcs = (XArc *)malloc((p->objects) * sizeof(XArc));
256264fa531Smrg    vsize = 1;
257264fa531Smrg    vsizeinc = (size - 1) / (p->objects - 1);
258264fa531Smrg    if (vsizeinc == 0) vsizeinc = 1;
259264fa531Smrg
260264fa531Smrg    x = half; y = half;
261264fa531Smrg    dir = 0;
262264fa531Smrg    rows = 0;
263264fa531Smrg    startAngle = DegreesToX(0);
264264fa531Smrg    arcAngle = DegreesToX(360);
265264fa531Smrg
266264fa531Smrg    for (i = 0; i != p->objects; i++) {
267264fa531Smrg	arcs[i].x = x;
268264fa531Smrg	arcs[i].y = y;
269264fa531Smrg	if ((i & 1) ^ dir) {
270264fa531Smrg	    /* Make vertical axis longer */
271264fa531Smrg	    arcs[i].width = vsize;
272264fa531Smrg	    arcs[i].height = size;
273264fa531Smrg	} else {
274264fa531Smrg	    /* Make horizontal axis longer */
275264fa531Smrg	    arcs[i].width = size;
276264fa531Smrg	    arcs[i].height = vsize;
277264fa531Smrg	}
278264fa531Smrg	arcs[i].angle1 = startAngle;
279264fa531Smrg	arcs[i].angle2 = arcAngle;
280264fa531Smrg
281264fa531Smrg	if (partialArcs) {
282264fa531Smrg	    startAngle += DegreesToX(30);
283264fa531Smrg	    if (startAngle >= DegreesToX(360)) startAngle -= DegreesToX(360);
284264fa531Smrg	    arcAngle -= DegreesToX(20);
285264fa531Smrg	    if (arcAngle <= DegreesToX(0)) arcAngle += DegreesToX(360);
286264fa531Smrg	}
287264fa531Smrg
288264fa531Smrg	y += size + 1;
289264fa531Smrg	rows++;
290264fa531Smrg	if (y >= HEIGHT - size - half || rows == MAXROWS) {
291264fa531Smrg	    /* Go to next column */
292264fa531Smrg	    rows = 0;
293264fa531Smrg	    y = half;
294264fa531Smrg	    x += size + 1;
295264fa531Smrg	    if (x >= WIDTH - size - half) {
296264fa531Smrg		x = half;
297264fa531Smrg	    }
298264fa531Smrg	}
299264fa531Smrg
300264fa531Smrg	vsize += vsizeinc;
301264fa531Smrg	if (vsize > size) {
302264fa531Smrg	    vsize -= size;
303264fa531Smrg	    dir = 1 - dir;
304264fa531Smrg	}
305264fa531Smrg    }
306264fa531Smrg}
307264fa531Smrg
308264fa531Smrgint
309533545b5SmrgInitEllipses(XParms xp, Parms p, int64_t reps)
310264fa531Smrg{
311264fa531Smrg    GenerateEllipses(xp, p, False, False);
312264fa531Smrg    return reps;
313264fa531Smrg}
314264fa531Smrg
315264fa531Smrg
316264fa531Smrgint
317533545b5SmrgInitPartEllipses(XParms xp, Parms p, int64_t reps)
318264fa531Smrg{
319264fa531Smrg    GenerateEllipses(xp, p, True, False);
320264fa531Smrg    return reps;
321264fa531Smrg}
322264fa531Smrg
323264fa531Smrg
324264fa531Smrgint
325533545b5SmrgInitChordPartEllipses(XParms xp, Parms p, int64_t reps)
326264fa531Smrg{
327264fa531Smrg    GenerateEllipses(xp, p, True, False);
328264fa531Smrg    XSetArcMode(xp->d, xp->bggc, ArcChord);
329264fa531Smrg    XSetArcMode(xp->d, xp->fggc, ArcChord);
330264fa531Smrg    return reps;
331264fa531Smrg}
332264fa531Smrg
333264fa531Smrg
334264fa531Smrgint
335533545b5SmrgInitSlicePartEllipses(XParms xp, Parms p, int64_t reps)
336264fa531Smrg{
337264fa531Smrg    GenerateEllipses(xp, p, True, False);
338264fa531Smrg    XSetArcMode(xp->d, xp->bggc, ArcPieSlice);
339264fa531Smrg    XSetArcMode(xp->d, xp->fggc, ArcPieSlice);
340264fa531Smrg    return reps;
341264fa531Smrg}
342264fa531Smrg
343264fa531Smrg
344264fa531Smrgstatic void
345264fa531SmrgGenerateWideEllipses(XParms xp, Parms p, Bool partialArcs, Bool ddashed)
346264fa531Smrg{
347264fa531Smrg    int size;
348264fa531Smrg
349264fa531Smrg    GenerateEllipses (xp, p, partialArcs, ddashed);
350264fa531Smrg    size = p->special;
351264fa531Smrg    if(ddashed) {
352264fa531Smrg	XSetLineAttributes(xp->d, xp->ddbggc, (int) ((size + 9) / 10),
353264fa531Smrg	    LineSolid, CapRound, JoinRound);
354264fa531Smrg	XSetLineAttributes(xp->d, xp->ddfggc, (int) ((size + 9) / 10),
355264fa531Smrg	    LineSolid, CapRound, JoinRound);
356264fa531Smrg    }
357264fa531Smrg    else {
358264fa531Smrg	XSetLineAttributes(xp->d, xp->bggc, (int) ((size + 9) / 10),
359264fa531Smrg	    LineSolid, CapRound, JoinRound);
360264fa531Smrg	XSetLineAttributes(xp->d, xp->fggc, (int) ((size + 9) / 10),
361264fa531Smrg	    LineSolid, CapRound, JoinRound);
362264fa531Smrg    }
363264fa531Smrg
364264fa531Smrg}
365264fa531Smrg
366264fa531Smrgint
367533545b5SmrgInitWideEllipses(XParms xp, Parms p, int64_t reps)
368264fa531Smrg{
369264fa531Smrg    GenerateWideEllipses(xp, p, False, False);
370264fa531Smrg    return reps;
371264fa531Smrg}
372264fa531Smrg
373264fa531Smrgint
374533545b5SmrgInitPartWideEllipses(XParms xp, Parms p, int64_t reps)
375264fa531Smrg{
376264fa531Smrg    GenerateWideEllipses(xp, p, True, False);
377264fa531Smrg    return reps;
378264fa531Smrg}
379264fa531Smrg
380264fa531Smrgint
381533545b5SmrgInitDashedEllipses(XParms xp, Parms p, int64_t reps)
382264fa531Smrg{
383264fa531Smrg    char dashes[2];
384264fa531Smrg
385264fa531Smrg    GenerateEllipses(xp, p, False, False);
386264fa531Smrg
387264fa531Smrg    /* Modify GCs to draw dashed */
388264fa531Smrg    XSetLineAttributes(xp->d, xp->bggc, 0, LineOnOffDash, CapButt, JoinMiter);
389264fa531Smrg    XSetLineAttributes(xp->d, xp->fggc, 0, LineOnOffDash, CapButt, JoinMiter);
390264fa531Smrg    dashes[0] = 3;   dashes[1] = 2;
391264fa531Smrg    XSetDashes(xp->d, xp->fggc, 0, dashes, 2);
392264fa531Smrg    XSetDashes(xp->d, xp->bggc, 0, dashes, 2);
393264fa531Smrg    return reps;
394264fa531Smrg}
395264fa531Smrg
396264fa531Smrgint
397533545b5SmrgInitWideDashedEllipses(XParms xp, Parms p, int64_t reps)
398264fa531Smrg{
399264fa531Smrg    int		size;
400264fa531Smrg    XGCValues   gcv;
401264fa531Smrg    char	dashes[2];
402264fa531Smrg
403264fa531Smrg    GenerateWideEllipses(xp, p, False, False);
404264fa531Smrg    size = p->special;
405264fa531Smrg    size = (size + 9) / 10;
406264fa531Smrg
407264fa531Smrg    /* Modify GCs to draw dashed */
408264fa531Smrg    dashes[0] = 2*size;   dashes[1] = 2*size;
409264fa531Smrg    gcv.line_style = LineOnOffDash;
410264fa531Smrg    XChangeGC(xp->d, xp->fggc, GCLineStyle, &gcv);
411264fa531Smrg    XChangeGC(xp->d, xp->bggc, GCLineStyle, &gcv);
412264fa531Smrg    XSetDashes(xp->d, xp->fggc, 0, dashes, 2);
413264fa531Smrg    XSetDashes(xp->d, xp->bggc, 0, dashes, 2);
414264fa531Smrg    return reps;
415264fa531Smrg}
416264fa531Smrg
417264fa531Smrgint
418533545b5SmrgInitDoubleDashedEllipses(XParms xp, Parms p, int64_t reps)
419264fa531Smrg{
420264fa531Smrg    char dashes[2];
421264fa531Smrg
422264fa531Smrg    GenerateEllipses(xp, p, False, True);
423264fa531Smrg
424264fa531Smrg    /* Modify GCs to draw dashed */
425264fa531Smrg    XSetLineAttributes(xp->d, xp->ddbggc, 0, LineDoubleDash, CapButt, JoinMiter);
426264fa531Smrg    XSetLineAttributes(xp->d, xp->ddfggc, 0, LineDoubleDash, CapButt, JoinMiter);
427264fa531Smrg    dashes[0] = 3;   dashes[1] = 2;
428264fa531Smrg    XSetDashes(xp->d, xp->ddfggc, 0, dashes, 2);
429264fa531Smrg    XSetDashes(xp->d, xp->ddbggc, 0, dashes, 2);
430264fa531Smrg    return reps;
431264fa531Smrg}
432264fa531Smrg
433264fa531Smrgint
434533545b5SmrgInitWideDoubleDashedEllipses(XParms xp, Parms p, int64_t reps)
435264fa531Smrg{
436264fa531Smrg    int		size;
437264fa531Smrg    XGCValues   gcv;
438264fa531Smrg    char	dashes[2];
439264fa531Smrg
440264fa531Smrg    GenerateWideEllipses(xp, p, False, True);
441264fa531Smrg    size = p->special;
442264fa531Smrg    size = (size + 9) / 10;
443264fa531Smrg
444264fa531Smrg    /* Modify GCs to draw dashed */
445264fa531Smrg    dashes[0] = 2*size;   dashes[1] = 2*size;
446264fa531Smrg    gcv.line_style = LineDoubleDash;
447264fa531Smrg    XChangeGC(xp->d, xp->ddfggc, GCLineStyle, &gcv);
448264fa531Smrg    XChangeGC(xp->d, xp->ddbggc, GCLineStyle, &gcv);
449264fa531Smrg    XSetDashes(xp->d, xp->ddfggc, 0, dashes, 2);
450264fa531Smrg    XSetDashes(xp->d, xp->ddbggc, 0, dashes, 2);
451264fa531Smrg    return reps;
452264fa531Smrg}
453264fa531Smrg
454264fa531Smrgvoid
455533545b5SmrgDoArcs(XParms xp, Parms p, int64_t reps)
456264fa531Smrg{
457264fa531Smrg    int i;
458264fa531Smrg
459264fa531Smrg    for (i = 0; i != reps; i++) {
460264fa531Smrg        XDrawArcs(xp->d, xp->w, pgc, arcs, p->objects);
461264fa531Smrg        if (pgc == xp->ddbggc)
462264fa531Smrg            pgc = xp->ddfggc;
463264fa531Smrg        else if(pgc == xp->ddfggc)
464264fa531Smrg            pgc = xp->ddbggc;
465264fa531Smrg        else if (pgc == xp->bggc)
466264fa531Smrg            pgc = xp->fggc;
467264fa531Smrg        else
468264fa531Smrg            pgc = xp->bggc;
469264fa531Smrg	CheckAbort ();
470264fa531Smrg    }
471264fa531Smrg}
472264fa531Smrg
473264fa531Smrgvoid
474533545b5SmrgDoFilledArcs(XParms xp, Parms p, int64_t reps)
475264fa531Smrg{
476264fa531Smrg    int i;
477264fa531Smrg
478264fa531Smrg    for (i = 0; i != reps; i++) {
479264fa531Smrg        XFillArcs(xp->d, xp->w, pgc, arcs, p->objects);
480264fa531Smrg        if (pgc == xp->ddbggc)
481264fa531Smrg            pgc = xp->ddfggc;
482264fa531Smrg        else if(pgc == xp->ddfggc)
483264fa531Smrg            pgc = xp->ddbggc;
484264fa531Smrg        else if (pgc == xp->bggc)
485264fa531Smrg            pgc = xp->fggc;
486264fa531Smrg        else
487264fa531Smrg            pgc = xp->bggc;
488264fa531Smrg	CheckAbort ();
489264fa531Smrg    }
490264fa531Smrg}
491264fa531Smrg
492264fa531Smrgvoid
493264fa531SmrgEndArcs(XParms xp, Parms p)
494264fa531Smrg{
495264fa531Smrg    free(arcs);
496264fa531Smrg}
497264fa531Smrg
498