aboutsummaryrefslogtreecommitdiff
path: root/pkg/images/tv/tvmark/mkonemark.x
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/images/tv/tvmark/mkonemark.x')
-rw-r--r--pkg/images/tv/tvmark/mkonemark.x392
1 files changed, 392 insertions, 0 deletions
diff --git a/pkg/images/tv/tvmark/mkonemark.x b/pkg/images/tv/tvmark/mkonemark.x
new file mode 100644
index 00000000..91bd9ee0
--- /dev/null
+++ b/pkg/images/tv/tvmark/mkonemark.x
@@ -0,0 +1,392 @@
+include <imhdr.h>
+include "tvmark.h"
+
+# MK_ONEMARK -- Procedure to mark symbols in the frame buffer given a
+# coordinate list and a mark type.
+
+procedure mk_onemark (mk, im, iw, wx, wy, owx, owy, label, ltid)
+
+pointer mk # pointer to the mark structure
+pointer im # frame image descriptor
+pointer iw # pointer to the wcs structure
+real wx, wy # coordinates of current list object
+real owx, owy # coordinates of previous list member
+char label[ARB] # current label
+int ltid # list sequence number
+
+int ncols, nlines, nr, nc, x1, x2, y1, y2
+pointer sp, str, lengths, radii
+real fx, fy, ofx, ofy, xmag, ymag, lmax, lratio, rmax, ratio
+int mk_stati(), itoc()
+int mk_plimits(), mk_llimits(), mk_rlimits(), mk_climits()
+pointer mk_statp()
+real mk_statr()
+
+begin
+ call smark (sp)
+ call salloc (str, SZ_LINE, TY_CHAR)
+ call salloc (lengths, MAX_NMARKS, TY_REAL)
+ call salloc (radii, MAX_NMARKS, TY_REAL)
+
+ ncols = IM_LEN(im,1)
+ nlines = IM_LEN(im,2)
+
+ # Convert from image to frame buffer coordinates.
+ if (IS_INDEFR(owx) || IS_INDEFR(owy)) {
+ owx = INDEFR
+ owy = INDEFR
+ } else
+ call iw_im2fb (iw, owx, owy, ofx, ofy)
+ call iw_im2fb (iw, wx, wy, fx, fy)
+ call mk_mag (im, iw, xmag, ymag)
+
+ switch (mk_stati (mk, MKTYPE)) {
+
+ case MK_POINT:
+ if (mk_plimits (fx, fy, mk_stati (mk, SZPOINT),
+ ncols, nlines, x1, x2, y1, y2) == YES) {
+ call mk_drawpt (im, x1, x2, y1, y2, mk_stati (mk, GRAYLEVEL))
+ call imflush (im)
+ }
+
+ case MK_LINE:
+ if (! IS_INDEFR(ofx) && ! IS_INDEFR(ofy)) {
+ if (mk_llimits (ofx, ofy, fx, fy, ncols, nlines, x1, x2,
+ y1, y2) == YES) {
+ call mk_drawline (im, ofx, ofy, fx, fy, x1, x2, y1, y2,
+ mk_stati (mk, GRAYLEVEL))
+ call imflush (im)
+ }
+ }
+
+ case MK_RECTANGLE:
+ nr = mk_stati (mk, NRECTANGLES)
+ if (xmag <= 0.0) {
+ lmax = 0.0
+ call amovkr (0.0, Memr[lengths], nr)
+ } else {
+ call adivkr (Memr[mk_statp(mk,RLENGTHS)], xmag, Memr[lengths],
+ nr)
+ lmax = Memr[lengths+nr-1]
+ }
+ if (ymag <= 0.0)
+ lratio = 0.0
+ else
+ lratio = mk_statr (mk, RATIO) * xmag / ymag
+ if (mk_rlimits (fx, fy, lmax, lratio, ncols, nlines, x1, x2,
+ y1, y2) == YES) {
+ call mk_drawbox (im, fx, fy, x1, x2, y1, y2, Memr[lengths],
+ lratio, nr, mk_stati (mk, GRAYLEVEL))
+ call imflush (im)
+ }
+
+ case MK_CIRCLE:
+ nc = mk_stati (mk, NCIRCLES)
+ if (xmag <= 0.0) {
+ rmax = 0.0
+ call amovkr (0.0, Memr[radii], nc)
+ } else {
+ call adivkr (Memr[mk_statp(mk, RADII)], xmag, Memr[radii], nc)
+ rmax = Memr[radii+nc-1]
+ }
+ if (ymag <= 0.0)
+ ratio = 0.0
+ else
+ ratio = xmag / ymag
+ if (mk_climits (fx, fy, rmax, ratio, ncols, nlines, x1, x2,
+ y1, y2) == YES) {
+ call mk_drawcircles (im, fx, fy, x1, x2, y1, y2,
+ Memr[radii], ratio, nc, mk_stati (mk, GRAYLEVEL))
+ call imflush (im)
+ }
+
+ case MK_PLUS:
+ call mk_textim (im, "+", nint (fx), nint (fy), mk_stati (mk, SIZE),
+ mk_stati (mk, SIZE), mk_stati (mk, GRAYLEVEL), YES)
+ call imflush (im)
+
+ case MK_CROSS:
+ call mk_textim (im, "*", nint (fx), nint (fy), mk_stati (mk, SIZE),
+ mk_stati (mk, SIZE), mk_stati (mk, GRAYLEVEL), YES)
+ call imflush (im)
+
+ default:
+ # Do nothing gracefully
+ }
+
+ # Number the text file.
+ if (mk_stati (mk, LABEL) == YES) {
+ if (label[1] != EOS) {
+ call mk_textim (im, label, nint (fx) + mk_stati (mk,
+ NXOFFSET), nint (fy) + mk_stati (mk, NYOFFSET),
+ mk_stati (mk, SIZE), mk_stati (mk, SIZE), mk_stati (mk,
+ GRAYLEVEL), NO)
+ call imflush (im)
+ }
+ } else if (mk_stati (mk, NUMBER) == YES) {
+ if (itoc (ltid, Memc[str], SZ_FNAME) > 0) {
+ call mk_textim (im, Memc[str], nint (fx) + mk_stati (mk,
+ NXOFFSET), nint (fy) + mk_stati (mk, NYOFFSET),
+ mk_stati (mk, SIZE), mk_stati (mk, SIZE), mk_stati (mk,
+ GRAYLEVEL), NO)
+ call imflush (im)
+ }
+ }
+
+ call sfree (sp)
+end
+
+
+# MK_DMARK -- Mark a dot.
+
+procedure mk_dmark (mk, im, fx, fy)
+
+pointer mk # pointer to the mark structure
+pointer im # pointer to the frame buffer
+real fx, fy # real coordinates
+
+int ncols, nlines, x1, y1, x2, y2
+int mk_stati(), mk_plimits()
+
+begin
+ ncols = IM_LEN(im,1)
+ nlines = IM_LEN(im,2)
+ if (mk_plimits (fx, fy, mk_stati (mk, SZPOINT), ncols, nlines,
+ x1, x2, y1, y2) == YES) {
+ call mk_drawpt (im, x1, x2, y1, y2, mk_stati (mk, GRAYLEVEL))
+ call imflush (im)
+ }
+
+ #call mk_seti (mk, X1, x1)
+ #call mk_seti (mk, Y1, y1)
+ #call mk_seti (mk, X2, x2)
+ #call mk_seti (mk, Y2, x2)
+end
+
+
+# MK_CMARK -- Mark concentric circle(s).
+
+procedure mk_cmark (mk, im, iw, fx, fy)
+
+pointer mk # pointer to the mark structure
+pointer im # pointer to the frame buffer image
+pointer iw # pointer to the wcs structure
+real fx, fy # center of circle
+
+int nc, ncols, nlines, x1, x2, y1, y2
+pointer sp, radii
+real xmag, ymag, rmax, ratio
+int mk_stati(), mk_climits()
+pointer mk_statp()
+
+begin
+ nc = mk_stati (mk, NCIRCLES)
+ if (nc <= 0)
+ return
+
+ ncols = IM_LEN(im,1)
+ nlines = IM_LEN(im,2)
+ call mk_mag (im, iw, xmag, ymag)
+
+ call smark (sp)
+ call salloc (radii, nc, TY_REAL)
+
+ if (xmag <= 0.0) {
+ rmax = 0.0
+ call amovkr (0.0, Memr[radii], nc)
+ } else {
+ call adivkr (Memr[mk_statp(mk,RADII)], xmag, Memr[radii], nc)
+ rmax = Memr[radii+nc-1]
+ }
+ if (ymag <= 0.0)
+ ratio = 0.0
+ else
+ ratio = xmag / ymag
+
+ if (mk_climits (fx, fy, rmax, ratio, ncols, nlines, x1, x2,
+ y1, y2) == YES) {
+ call mk_drawcircles (im, fx, fy, x1, x2, y1, y2, Memr[radii],
+ ratio, nc, mk_stati (mk, GRAYLEVEL))
+ call imflush (im)
+ }
+
+ #call mk_seti (mk, X1, x1)
+ #call mk_seti (mk, Y1, y1)
+ #call mk_seti (mk, X2, x2)
+ #call mk_seti (mk, Y2, y2)
+
+ call sfree (sp)
+end
+
+
+# MK_OCMARK -- Mark one circle.
+
+procedure mk_ocmark (mk, im, iw, fx, fy, rmax)
+
+pointer mk # pointer to the mark structure
+pointer im # pointer to the frame buffer image
+pointer iw # pointer to the wcs structure
+real fx, fy # center of circle
+real rmax # maximum radius
+
+int ncols, nlines, x1, x2, y1, y2
+int mk_climits(), mk_stati()
+
+begin
+ ncols = IM_LEN(im,1)
+ nlines = IM_LEN(im,2)
+
+ if (mk_climits (fx, fy, rmax, 1.0, ncols, nlines, x1, x2,
+ y1, y2) == YES) {
+ call mk_drawcircles (im, fx, fy, x1, x2, y1, y2, rmax,
+ 1.0, 1, mk_stati (mk, GRAYLEVEL))
+ call imflush (im)
+ }
+
+ #call mk_seti (mk, X1, x1)
+ #call mk_seti (mk, Y1, y1)
+ #call mk_seti (mk, X2, x2)
+ #call mk_seti (mk, Y2, y2)
+end
+
+
+# MK_LMARK -- Mark s line segment
+
+procedure mk_lmark (mk, im, ofx, ofy, fx, fy)
+
+pointer mk # pointer to the mark structure
+pointer im # pointer to the frame buffer
+real ofx, ofy # coords of first point
+real fx, fy # coords of second point
+
+int ncols, nlines, x1, y1, x2, y2
+int mk_stati(), mk_llimits()
+
+begin
+ ncols = IM_LEN(im,1)
+ nlines = IM_LEN(im,2)
+
+ if (mk_llimits (ofx, ofy, fx, fy, ncols, nlines, x1, x2,
+ y1, y2) == YES) {
+ call mk_drawline (im, ofx, ofy, fx, fy, x1, x2, y1, y2,
+ mk_stati (mk, GRAYLEVEL))
+ call imflush (im)
+ }
+
+ #call mk_seti (mk, X1, x1)
+ #call mk_seti (mk, Y1, y1)
+ #call mk_seti (mk, X2, x2)
+ #call mk_seti (mk, Y2, y2)
+end
+
+
+# MK_TMARK -- Mark a text string
+
+procedure mk_tmark (mk, im, str, fx, fy, center)
+
+pointer mk # pointer to the mark structure
+pointer im # pointer to the frame buffer image
+char str[ARB] # character string to be drawn
+real fx, fy # lower left coords of string
+int center # center the string
+
+int ncols, nlines
+#int x1, x2, y1, y2
+int mk_stati()
+
+begin
+ ncols = IM_LEN(im,1)
+ nlines = IM_LEN(im,2)
+
+ call mk_textim (im, str, nint (fx), nint (fy), mk_stati (mk, SIZE),
+ mk_stati(mk, SIZE), mk_stati (mk, GRAYLEVEL), center)
+ call imflush (im)
+
+ #call mk_seti (mk, X1, x1)
+ #call mk_seti (mk, Y1, y1)
+ #call mk_seti (mk, X2, x1)
+ #call mk_seti (mk, Y2, y2)
+end
+
+
+# MK_RMARK -- Mark concentric rectangles.
+
+procedure mk_rmark (mk, im, iw, fx, fy)
+
+pointer mk # pointer to the mark structure
+pointer im # pointer to the frame buffer
+pointer iw # pointer to the wcs structure
+real fx, fy # x and y center coordinates
+
+int nr, ncols, nlines, x1, y1, x2, y2
+pointer sp, lengths
+real xmag, ymag, lmax, lratio
+int mk_stati(), mk_rlimits()
+pointer mk_statp()
+real mk_statr()
+
+begin
+ nr = mk_stati (mk, NRECTANGLES)
+ if (nr <= 0)
+ return
+
+ ncols = IM_LEN(im,1)
+ nlines = IM_LEN(im,2)
+ call mk_mag (im, iw, xmag, ymag)
+
+ call smark (sp)
+ call salloc (lengths, nr, TY_REAL)
+
+ if (xmag <= 0.0) {
+ lmax = 0.0
+ call amovkr (0.0, Memr[lengths], nr)
+ } else {
+ lmax = Memr[mk_statp(mk, RLENGTHS)+nr-1] / xmag
+ call adivkr (Memr[mk_statp(mk,RLENGTHS)], xmag, Memr[lengths], nr)
+ }
+ if (ymag <= 0.0)
+ lratio = 0.0
+ else
+ lratio = mk_statr (mk, RATIO) * xmag / ymag
+
+ if (mk_rlimits (fx, fy, lmax, lratio, ncols, nlines, x1, x2,
+ y1, y2) == YES) {
+ call mk_drawbox (im, fx, fy, x1, x2, y1, y2, Memr[lengths],
+ lratio, nr, mk_stati (mk, GRAYLEVEL))
+ call imflush (im)
+ }
+
+ #call mk_seti (mk, X1, x1)
+ #call mk_seti (mk, Y1, y1)
+ #call mk_seti (mk, X2, x2)
+ #call mk_seti (mk, Y2, y2)
+
+ call sfree (sp)
+end
+
+
+# MK_XMARK -- Procedure to mark a box.
+
+procedure mk_xmark (mk, im, ofx, ofy, fx, fy)
+
+pointer mk # pointer to the mark structure
+pointer im # pointer to the frame buffer image
+real ofx, ofy # first corner coordinates
+real fx, fy # second corner coordinates
+
+int ncols, nlines, x1, x2, y1, y2
+int mk_stati()
+
+begin
+ ncols = IM_LEN(im,1)
+ nlines = IM_LEN(im,2)
+
+ call mk_blimits (ofx, ofy, fx, fy, ncols, nlines, x1, x2, y1, y2)
+ call mk_pbox (im, x1, x2, y1, y2, mk_stati (mk, GRAYLEVEL))
+ call imflush (im)
+
+ #call mk_seti (mk, X1, x1)
+ #call mk_seti (mk, Y1, y1)
+ #call mk_seti (mk, X2, x2)
+ #call mk_seti (mk, Y2, y2)
+end