|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T c
Length: 8788 (0x2254)
Types: TextFile
Names: »calc.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki
└─⟦526ad3590⟧ »EUUGD11/gnu-31mar87/X.V10.R4.tar.Z«
└─⟦2109abc41⟧
└─⟦this⟧ »./X.V10R4/Toolkit/Xr/src/Xrlib/Intrinsic/calc.c«
/*
* $Source: /u1/Xr/src/Xrlib/Intrinsic/RCS/calc.c,v $
* $Header: calc.c,v 1.1 86/12/17 09:07:46 swick Exp $
*/
#ifndef lint
static char *rcsid_calc_c = "$Header: calc.c,v 1.1 86/12/17 09:07:46 swick Exp $";
#endif lint
#include <Xr/xr-copyright.h>
/* $Header: calc.c,v 1.1 86/12/17 09:07:46 swick Exp $ */
/* Copyright 1986, Hewlett-Packard Company */
/* Copyright 1986, Massachussetts Institute of Technology */
static char rcsid[] = "$Header: calc.c,v 1.1 86/12/17 09:07:46 swick Exp $";
/*************************************<+>*************************************
*****************************************************************************
**
** File: calc.c
**
** Project: X-ray Toolbox
**
** Description: This file contains the set of point and rectangle
** calculation routines.
**
**
** ------------------------ MODIFICATION RECORD ------------------------
*
* $Log: calc.c,v $
* Revision 1.1 86/12/17 09:07:46 swick
* Initial revision
*
* Revision 7.0 86/11/13 08:17:59 08:17:59 rick ()
* Final QA release
*
* Revision 6.0 86/11/10 15:21:06 15:21:06 rick ()
* QA #2 release
*
* Revision 5.1 86/11/07 14:01:18 14:01:18 rick ()
* Added the copyright message.
*
* Revision 5.0 86/10/28 08:21:50 08:21:50 rick ()
* QA #1.1 release
*
* Revision 4.0 86/10/20 12:07:28 12:07:28 rick ()
* QA 1 release
*
* Revision 3.2 86/10/17 12:22:27 12:22:27 rick ()
* Linted
*
* Revision 3.1 86/10/16 11:19:43 11:19:43 rick ()
* Added register variables.
*
* Revision 3.0 86/10/02 15:56:39 15:56:39 rick ()
* Alpha release set to 3.0
*
* Revision 2.0 86/09/16 07:55:55 07:55:55 rick ()
* *** empty log message ***
*
* Revision 1.1 86/09/03 13:34:51 13:34:51 rick ()
* Initial revision
*
*
*****************************************************************************
*************************************<+>*************************************/
#include <X/Xlib.h>
#include <Xr/defs.h>
#include <Xr/types.h>
\f
/*************************************<->*************************************
*
* Procedures:
* -----------
* Refer to XrRectangle(3Xr) man page.
*
*
* Descriptions:
* -----------
* XrSetRect - Set the fields of a rectangle.
*
* XrSetPtRect - Find an assign the coordinates of a rectangle.
*
* XrCopyRect - Copy one rectangle into another.
*
* XrOffsetRect - Move a rectangle by the offset values.
*
* XrInsetRect - Change the size of a rectangle.
*
* XrSectRect - Find the intersection of 2 rectangles.
*
* XrUnionRect - Find the union of 2 rectangles.
*
* XrPtInRect - Is the point in the rectangle?
*
* XrPt2Rect - Find the rectangle enclosing 2 points.
*
* XrEqualRect - Compare 2 rectangle for equality.
*
* XrEmptyRect - Is the rectangle empty?
*
*
* Inputs:
* ------
* Refer to XrRectangle(3Xr) man page.
*
*
* Outputs:
* -------
* Refer to XrRectangle(3Xr) man page.
*
*
* Procedures Called
* -----------------
* None.
*
*************************************<->***********************************/
XrSetRect (rect, x, y, width, height)
register RECTANGLE * rect;
INT16 x;
INT16 y;
INT16 width;
INT16 height;
{
rect -> x = x;
rect -> y = y;
rect -> width = width;
rect -> height = height;
}
XrSetPtRect (rect, topLeft, botRight)
register RECTANGLE * rect;
register POINT * topLeft;
register POINT * botRight;
{
rect -> x = topLeft -> x;
rect -> y = topLeft -> y;
rect -> width = botRight -> x - topLeft -> x + 1;
rect -> height = botRight -> y - topLeft -> y + 1;
}
XrCopyRect (srcRect, dstRect)
register RECTANGLE * srcRect;
register RECTANGLE * dstRect;
{
dstRect -> x = srcRect -> x;
dstRect -> y = srcRect -> y;
dstRect -> width = srcRect -> width;
dstRect -> height = srcRect -> height;
}
XrOffsetRect (rect, dx, dy)
RECTANGLE * rect;
INT16 dx;
INT16 dy;
{
rect -> x += dx;
rect -> y += dy;
}
XrInsetRect (rect, dx, dy)
register RECTANGLE * rect;
register INT16 dx;
register INT16 dy;
{
rect -> x += dx;
rect -> y += dy;
rect -> width -= (dx + dx);
rect -> height -= (dy + dy);
}
XrSectRect (srcRectA, srcRectB, dstRect)
register RECTANGLE * srcRectA;
register RECTANGLE * srcRectB;
register RECTANGLE * dstRect;
{
register int srcABot, srcBBot;
register int srcARight, srcBRight;
srcABot = srcRectA -> y + srcRectA -> height - 1;
srcBBot = srcRectB -> y + srcRectB -> height - 1;
srcARight = srcRectA -> x + srcRectA -> width - 1;
srcBRight = srcRectB -> x + srcRectB -> width - 1;
if (srcRectA -> x >= srcRectB -> x) dstRect -> x = srcRectA -> x;
else dstRect -> x = srcRectB -> x;
if (srcRectA -> y > srcRectB -> y) dstRect -> y = srcRectA -> y;
else dstRect -> y = srcRectB -> y;
if (srcARight >= srcBRight) dstRect->width = srcBRight - dstRect->x + 1;
else dstRect->width = srcARight - dstRect->x + 1;
if (srcABot > srcBBot) dstRect->height = srcBBot - dstRect->y + 1;
else dstRect->height = srcABot - dstRect->y + 1;
if (XrEmptyRect(dstRect))
{
XrSetRect(dstRect, 0, 0, 0, 0);
return(FALSE);
}
return(TRUE);
}
XrUnionRect (srcRectA, srcRectB, dstRect)
register RECTANGLE * srcRectA;
register RECTANGLE * srcRectB;
register RECTANGLE * dstRect;
{
register int srcABot, srcBBot;
register int srcARight, srcBRight;
srcABot = srcRectA -> y + srcRectA -> height - 1;
srcBBot = srcRectB -> y + srcRectB -> height - 1;
srcARight = srcRectA -> x + srcRectA -> width - 1;
srcBRight = srcRectB -> x + srcRectB -> width - 1;
if (srcRectA -> x >= srcRectB -> x) dstRect -> x = srcRectB -> x;
else dstRect -> x = srcRectA -> x;
if (srcRectA -> y >= srcRectB -> y) dstRect -> y = srcRectB -> y;
else dstRect -> y = srcRectA -> y;
if (srcABot >= srcBBot) dstRect->height = srcABot - dstRect->y + 1;
else dstRect->height = srcBBot - dstRect->y + 1;
if (srcARight >= srcBRight) dstRect->width = srcARight - dstRect->x + 1;
else dstRect->width = srcBRight - dstRect->x + 1;
}
XrPtInRect (pt, r)
register POINT * pt;
register RECTANGLE * r;
{
if (pt->x < r->x || pt->x >= r->x + r->width ||
pt->y < r->y || pt->y >= r->y + r->height)
return (FALSE);
return (TRUE);
}
XrPt2Rect (ptA, ptB, dstRect)
register POINT * ptA;
register POINT * ptB;
register RECTANGLE * dstRect;
{
if (ptA->x > ptB->x)
{
dstRect->x = ptB->x;
dstRect->width = ptA->x - ptB->x + 1;
}
else
{
dstRect->x = ptA->x;
dstRect->width = ptB->x - ptA->x + 1;
}
if (ptA->y > ptB->y)
{
dstRect->y = ptB->y;
dstRect->height = ptA->y - ptB->y + 1;
}
else
{
dstRect->y = ptA->y;
dstRect->height = ptB->y - ptA->y + 1;
}
}
XrEqualRect (rectA, rectB)
register RECTANGLE * rectA;
register RECTANGLE * rectB;
{
if (rectA->x == rectB->x && rectA->y == rectB->y &&
rectA->width == rectB->width && rectA->height == rectB->height)
return (TRUE);
return (FALSE);
}
XrEmptyRect (r)
register RECTANGLE * r;
{
if (r->width <= 0 || r->height <= 0)
return (TRUE);
return (FALSE);
}
\f
/*************************************<->*************************************
*
* Procedures:
* -----------
* Refer to XrPoint(3Xr) man page.
*
*
* Descriptions:
* -----------
* XrAddPt - Add two points together.
*
* XrSubPt - Subtract to points.
*
* XrSetPt - Set a point's fields.
*
* XrOffsetPt - Add an offset to a point.
*
* XrCopyPt - Copy one point into another.
*
* XrEqualPt - Return TRUE if the two points are equal.
*
*
* Inputs:
* ------
* Refer to XrPoint(3Xr) man page.
*
*
* Outputs:
* -------
* Refer to XrPoint(3Xr) man page.
*
*
* Procedures Called
* -----------------
* None.
*
*************************************<->***********************************/
XrAddPt (srcPt, dstPt)
POINT * srcPt;
POINT * dstPt;
{
dstPt->x += srcPt->x;
dstPt->y += srcPt->y;
}
XrSubPt (srcPt, dstPt)
POINT * srcPt;
POINT * dstPt;
{
dstPt->x -= srcPt->x;
dstPt->y -= srcPt->y;
}
XrSetPt (pt, x, y)
POINT * pt;
INT16 x;
INT16 y;
{
pt->x = x;
pt->y = y;
}
XrOffsetPt (srcPt, dx, dy)
POINT * srcPt;
INT16 dx;
INT16 dy;
{
srcPt -> x += dx;
srcPt -> y += dy;
}
XrCopyPt (srcPt, dstPt)
POINT * srcPt;
POINT * dstPt;
{
dstPt->x = srcPt->x;
dstPt->y = srcPt->y;
}
XrEqualPt (ptA, ptB)
register POINT * ptA;
register POINT * ptB;
{
if (ptA->x == ptB->x && ptA->y == ptB->y)
return (TRUE);
return (FALSE);
}