03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/************************************************************
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncCopyright 1989, 1998 The Open Group
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncPermission to use, copy, modify, distribute, and sell this software and its
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncdocumentation for any purpose is hereby granted without fee, provided that
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncthe above copyright notice appear in all copies and that both that
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsynccopyright notice and this permission notice appear in supporting
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncdocumentation.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncThe above copyright notice and this permission notice shall be included in
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncall copies or substantial portions of the Software.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncExcept as contained in this notice, the name of The Open Group shall not be
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncused in advertising or otherwise to promote the sale, use or other dealings
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncin this Software without prior written authorization from The Open Group.
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync********************************************************/
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsynctypedef struct {
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int x;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int y;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int mask;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync} miZeroArcPtRec;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsynctypedef struct {
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int x, y, k1, k3, a, b, d, dx, dy;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int alpha, beta;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int xorg, yorg;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int xorgo, yorgo;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int w, h;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int initialMask;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync miZeroArcPtRec start, altstart, end, altend;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int firstx, firsty;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync int startAngle, endAngle;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync} miZeroArcRec;
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define miCanZeroArc(arc) (((arc)->width == (arc)->height) || \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync (((arc)->width <= 800) && ((arc)->height <= 800)))
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define MIARCSETUP() \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync x = info.x; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync y = info.y; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync k1 = info.k1; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync k3 = info.k3; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync a = info.a; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync b = info.b; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync d = info.d; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync dx = info.dx; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync dy = info.dy
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define MIARCOCTANTSHIFT(clause) \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync if (a < 0) \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync { \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync if (y == info.h) \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync { \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync d = -1; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync a = b = k1 = 0; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync } \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync else \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync { \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync dx = (k1 << 1) - k3; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync k1 = dx - k1; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync k3 = -k3; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync b = b + a - (k1 >> 1); \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync d = b + ((-a) >> 1) - d + (k3 >> 3); \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync if (dx < 0) \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync a = -((-dx) >> 1) - a; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync else \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync a = (dx >> 1) - a; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync dx = 0; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync dy = 1; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync clause \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync } \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync }
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define MIARCSTEP(move1,move2) \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync b -= k1; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync if (d < 0) \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync { \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync x += dx; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync y += dy; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync a += k1; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync d += b; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync move1 \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync } \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync else \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync { \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync x++; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync y++; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync a += k3; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync d -= a; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync move2 \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync }
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync#define MIARCCIRCLESTEP(clause) \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync b -= k1; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync x++; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync if (d < 0) \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync { \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync a += k1; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync d += b; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync } \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync else \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync { \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync y++; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync a += k3; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync d -= a; \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync clause \
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync }
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync/* mizerarc.c */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsyncextern _X_EXPORT Bool miZeroArcSetup(xArc * /*arc */ ,
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync miZeroArcRec * /*info */ ,
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync Bool /*ok360 */
03532efdc331b598d3dedc8cc7477641c3b0dd12vboxsync );