/* zzclip.f -- translated by f2c (version 19961017).
You must link the resulting object file with the libraries:
-lf2c -lm (in that order)
*/
#include "f2c.h"
/* Common Block Declarations */
extern struct {
real xpgmin, ypgmin, xpgmax, ypgmax, xclbot, yclbot, xcltop, ycltop, xbot,
ybot, xtop, ytop, xmin, ymin, xmax, ymax;
integer ixcoor, iycoor;
real alphxx, betaxx, alphyy, betayy, tmajx, tminx, tmajy, tminy;
integer majrx, minrx, majry, minry, isizx, isizy;
real xphold, yphold;
} zzzplt_;
#define zzzplt_1 zzzplt_
extern struct {
real xphmax, yphmax;
integer ixpmax, iypmax;
real xpscal, ypscal;
integer iflip, nplotr;
char cfile[64];
} zzpltr_;
#define zzpltr_1 zzpltr_
/* Subroutine */ int zzclip_(real *x1in, real *y1in, real *x2in, real *y2in)
{
static real temp, slope, x1, x2, y1, y2, dx, dy;
static logical linter;
/* Clip the input line to the predefined plotting region. */
/* INPUTS */
/* ------ */
/* X1IN = start X-coordinate of line (physical coordinates) */
/* Y1IN = start Y-coordinate of line */
/* X2IN = end X-coordinate of line */
/* Y2IN = end Y-coordinate of line */
/* OUTPUTS */
/* ------- */
/* same as above but clipped so that the line fits into the plotting */
/* region defined by calling SETW. */
/* If the line falls entirely outside of the plotting region, then */
/* X1IN is returned as -1.E+38. */
/* .......................................................................
*/
/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
/* Check to see if line can be thrown out as being totally out of */
/* the plotting region. */
/* Internal Data for PLOTPAK */
if (dmax(*x1in,*x2in) < zzzplt_1.xclbot || dmin(*x1in,*x2in) >
zzzplt_1.xcltop || dmax(*y1in,*y2in) < zzzplt_1.yclbot || dmin(*
y1in,*y2in) > zzzplt_1.ycltop) {
*x1in = -1e38f;
goto L8000;
}
/* Copy input coordinates to local variables, making sure */
/* that X1 .LE. X2 by interchanging the points if necessary. */
linter = *x1in > *x2in;
if (linter) {
x1 = *x2in;
x2 = *x1in;
y1 = *y2in;
y2 = *y1in;
} else {
x1 = *x1in;
x2 = *x2in;
y1 = *y1in;
y2 = *y2in;
}
/* Clip line in X direction */
dx = x2 - x1;
if (dx > 0.f) {
/* only clip if line has some X range */
slope = (y2 - y1) / dx;
if (x1 < zzzplt_1.xclbot) {
/* intercept of line at left side */
y1 += slope * (zzzplt_1.xclbot - x1);
x1 = zzzplt_1.xclbot;
}
if (x2 > zzzplt_1.xcltop) {
/* intercept at right */
y2 += slope * (zzzplt_1.xcltop - x2);
x2 = zzzplt_1.xcltop;
}
}
/* Check line again to see if it falls outside of plot region. */
if (dmax(y1,y2) < zzzplt_1.yclbot || dmin(y1,y2) > zzzplt_1.ycltop) {
*x1in = -1e38f;
goto L8000;
}
/* Clip Y-direction. To do this, must have Y1 .LE. Y2 */
if (y1 > y2) {
temp = x1;
x1 = x2;
x2 = temp;
temp = y1;
y1 = y2;
y2 = temp;
linter = ! linter;
}
dy = y2 - y1;
if (dy > 0.f) {
/* only clip if line has some Y range */
slope = (x2 - x1) / dy;
if (y1 < zzzplt_1.yclbot) {
/* intercept of line at bottom */
x1 += slope * (zzzplt_1.yclbot - y1);
y1 = zzzplt_1.yclbot;
}
if (y2 > zzzplt_1.ycltop) {
/* intercept at top */
x2 += slope * (zzzplt_1.ycltop - y2);
y2 = zzzplt_1.ycltop;
}
}
/* Line is now guaranteed to be totally inside the plot region. */
/* Copy local clipped coordinates to output values and return. */
/* Note that we must restore points to original input order. */
if (linter) {
*x1in = x2;
*x2in = x1;
*y1in = y2;
*y2in = y1;
} else {
*x1in = x1;
*y1in = y1;
*x2in = x2;
*y2in = y2;
}
L8000:
return 0;
} /* zzclip_ */
syntax highlighted by Code2HTML, v. 0.9.1