aboutsummaryrefslogtreecommitdiff
path: root/pkg/images/tv/tvmark/mkfind.x
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/images/tv/tvmark/mkfind.x')
-rw-r--r--pkg/images/tv/tvmark/mkfind.x52
1 files changed, 52 insertions, 0 deletions
diff --git a/pkg/images/tv/tvmark/mkfind.x b/pkg/images/tv/tvmark/mkfind.x
new file mode 100644
index 00000000..5824422a
--- /dev/null
+++ b/pkg/images/tv/tvmark/mkfind.x
@@ -0,0 +1,52 @@
+include <mach.h>
+
+# MK_FIND -- Procedure to detect the object in a file closest to the
+# input cursor position.
+
+int procedure mk_find (cl, xcur, ycur, xlist, ylist, label, id, ltid, tol)
+
+int cl # coordinates file descriptor
+real xcur, ycur # x and y cursor position
+real xlist, ylist # x and y list position
+char label[ARB] # label string
+int id # sequence number of detected object in list
+int ltid # current sequence number in the list
+real tol # tolerance for detection
+
+real x, y, dist2, ldist2, tol2
+int fscan(), nscan()
+
+begin
+ if (cl == NULL)
+ return (0)
+ call seek (cl, BOF)
+ ltid = 0
+
+ # Initialize
+ id = 0
+ dist2 = MAX_REAL
+ tol2 = tol ** 2
+
+ # Fetch the coordinates.
+ while (fscan (cl) != EOF) {
+ call gargr (x)
+ call gargr (y)
+ call gargwrd (label, SZ_LINE)
+ if (nscan () < 2)
+ next
+ if (nscan () < 3)
+ label[1] = EOS
+ ltid = ltid + 1
+ ldist2 = (x - xcur) ** 2 + (y - ycur) ** 2
+ if (ldist2 > tol2)
+ next
+ if (ldist2 > dist2)
+ next
+ xlist = x
+ ylist = y
+ dist2 = ldist2
+ id = ltid
+ }
+
+ return (id)
+end