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