aboutsummaryrefslogtreecommitdiff
path: root/sys/pmio/pmglp.gx
diff options
context:
space:
mode:
authorJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
committerJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
commit40e5a5811c6ffce9b0974e93cdd927cbcf60c157 (patch)
tree4464880c571602d54f6ae114729bf62a89518057 /sys/pmio/pmglp.gx
downloadiraf-osx-40e5a5811c6ffce9b0974e93cdd927cbcf60c157.tar.gz
Repatch (from linux) of OSX IRAF
Diffstat (limited to 'sys/pmio/pmglp.gx')
-rw-r--r--sys/pmio/pmglp.gx69
1 files changed, 69 insertions, 0 deletions
diff --git a/sys/pmio/pmglp.gx b/sys/pmio/pmglp.gx
new file mode 100644
index 00000000..26c6b2e0
--- /dev/null
+++ b/sys/pmio/pmglp.gx
@@ -0,0 +1,69 @@
+# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
+
+include <pmset.h>
+include <plio.h>
+
+# PM_GLP -- Get a line segment as a pixel array, applying the given ROP to
+# combine the pixels with those of the output array.
+
+procedure pm_glp$t (pl, v, px_dst, px_depth, npix, rop)
+
+pointer pl #I mask descriptor
+long v[PL_MAXDIM] #I vector coords of line segment
+PIXEL px_dst[ARB] #O output pixel array
+int px_depth #I pixel depth, bits
+int npix #I number of pixels desired
+int rop #I rasterop
+
+int temp, np, step, xstep
+pointer sp, px_src, px_out, im
+include "../pmio.com"
+
+begin
+ im = PM_REFIM(pl)
+ if (PM_MAPXY(pl) == NO) {
+ call pl_glp$t (pl, v, px_dst, px_depth, npix, rop)
+ return
+ }
+
+ call smark (sp)
+
+ # Determine physical coords of line segment.
+ call amovl (v, v3, PM_MAXDIM)
+ call imaplv (im, v3, v1, PM_MAXDIM)
+ v3[1] = v3[1] + npix - 1
+ call imaplv (im, v3, v2, PM_MAXDIM)
+
+ # Get line scaling parameters.
+ if (npix <= 1)
+ xstep = 1
+ else
+ xstep = (v2[1] - v1[1]) / (npix - 1)
+ step = xstep
+ if (xstep < 0) {
+ temp = v1[1]; v1[1] = v2[1]; v2[1] = temp
+ step = -step
+ }
+
+ # Extract the pixels.
+ np = (npix - 1) * step + 1
+ call salloc (px_src, np, TY_PIXEL)
+ call pl_glp$t (pl, v1, Mem$t[px_src], 0, np, PIX_SRC)
+
+ # Subsample and flip if necessary.
+ if (step > 1)
+ call imsamp (Mem$t[px_src], Mem$t[px_src], npix, SZ_PIXEL, step)
+ if (xstep < 0)
+ call imaflp (Mem$t[px_src], npix, SZ_PIXEL)
+
+ if (!R_NEED_DST(rop))
+ call amov$t (Mem$t[px_src], px_dst, npix)
+ else {
+ call salloc (px_out, npix, TY_PIXEL)
+ call pl_pixrop$t (Mem$t[px_src], 1, PL_MAXVAL(pl), px_dst, 1,
+ MV(px_depth), npix, rop)
+ call amov$t (Mem$t[px_out], px_dst, npix)
+ }
+
+ call sfree (sp)
+end