aboutsummaryrefslogtreecommitdiff
path: root/pkg/images/tv/iis/iism70/iiszoom.x
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
commitfa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 (patch)
treebdda434976bc09c864f2e4fa6f16ba1952b1e555 /pkg/images/tv/iis/iism70/iiszoom.x
downloadiraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz
Initial commit
Diffstat (limited to 'pkg/images/tv/iis/iism70/iiszoom.x')
-rw-r--r--pkg/images/tv/iis/iism70/iiszoom.x98
1 files changed, 98 insertions, 0 deletions
diff --git a/pkg/images/tv/iis/iism70/iiszoom.x b/pkg/images/tv/iis/iism70/iiszoom.x
new file mode 100644
index 00000000..d703beec
--- /dev/null
+++ b/pkg/images/tv/iis/iism70/iiszoom.x
@@ -0,0 +1,98 @@
+# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
+
+include <mach.h>
+include "iis.h"
+include "../lib/ids.h"
+
+# IISZOOM -- Read and Write zoom magnification and coordinates.
+# the zoom coordinates give the point that should appear in the
+# center of the screen. For the I2S model 70, this requires a
+# scroll. In order for the scroll to be "determinable", we always
+# set the I2S "zoom center" to (IIS_XCEN,IIS_YCEN_INV). The IIS_YCEN_INV
+# results from specifying IIS_YCEN for y center and then having to "invert" y
+# to put GKI(y) = 0 at bottom.
+# This routine implements a command of the form "zoom these frames
+# to the coordinates given, with each triple of data setting a
+# zoom factor and a zoom center for the corresponding frame".
+# If there are excess frames (rel. to "n"), use the last triple.
+
+procedure iiszoom (rw, frames, n, data)
+
+short rw # read or write
+short frames[ARB] # which frames to zoom
+short n # number of data values
+short data[ARB] # the data
+
+int command,x
+int i, total,pl,index
+short zm,temp[4]
+short scroll[2*IDS_MAXIMPL + 1]
+short center[3]
+# magnification, and "zoom center"
+data temp /0,IIS_XCEN,IIS_YCEN_INV, 0/
+# center in GKI x=256 y=255
+data center/ 16384, 16320, 0/
+
+include "iis.com"
+
+begin
+ total = n/3
+
+ if ( rw != IDS_WRITE) {
+ # hardware is write only
+ do i = 1, total {
+ index = (i-1) * 3 + 1
+ pl = frames[i]
+ if ( pl == IDS_EOD)
+ break
+ data[index] = zoom[pl]
+ data[index+1] = xscroll[pl] * MCXSCALE
+ data[index+2] = yscroll[pl] * MCYSCALE
+ }
+ if ( 3*total < n)
+ data[index+3] = IDS_EOD
+ return
+ }
+
+ # can't have in data statements as IDS_EOD == (-2) and
+ # fortran won't allow () in data statements!!!
+
+ temp[4] = IDS_EOD
+ center[3] = IDS_EOD
+ command = IWRITE+VRETRACE
+ x = ADVXONTC
+
+ # the model 70 zooms all frames together. So ignore "frames"
+ # argument here, though needed for subsequent scroll.
+
+ zm = data[1]
+ if ( zm <= 1 )
+ zm = 0
+ else if (zm >= 8)
+ zm = 3
+ else
+ switch(zm) {
+ case 2,3:
+ zm = 1
+
+ case 4,5,6,7:
+ zm = 2
+ }
+ call amovks(short(2**zm), zoom, 16)
+ temp[1] = zm
+ call iishdr (command, 3, ZOOM, x, 0, 0, 0)
+ call iisio (temp, 3 * SZB_CHAR)
+
+ # now we have to scroll to the desired location (in GKI).
+ # If zoom is zero, don't do anything: this will leave the
+ # various images panned to some previously set place, but
+ # that is what is wanted when doing split screen and we pan
+ # some of the images.
+
+ if (zm != 0) {
+ do i = 1, total
+ call amovs (data[i * 3 - 1 ], scroll[i*2-1], 2)
+ scroll[total*2+1] = IDS_EOD
+ call iisscroll(short(IDS_WRITE), frames, short(total*2+1), scroll)
+ }
+end