(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP")
(FILECREATED " 4-Apr-88 11:51:42" {ERINYES}<LISPUSERS>MEDLEY>TRAJECTORY-FOLLOWER.;1 9967   

      changes to%:  (FNS TRAJECTORY.FOLLOW TRAJECTORY.FOLLOWER.POINT TRAJECTORY.FOLLOWER.PUT 
                         TRAJECTORY.FOLLOWER.SETUP TRAJECTORY.FOLLOWER.TEST 
                         TRAJECTORY.FOLLOWER.WRAPUP)
                    (VARS TRAJECTORY-FOLLOWERCOMS)

      previous date%: " 4-Apr-88 11:43:37" {CORE}TRAJECTORY-FOLLOWER.;2)


(* "
Copyright (c) 1986, 1988 by Xerox Corporation.  All rights reserved.
")

(PRETTYCOMPRINT TRAJECTORY-FOLLOWERCOMS)

(RPAQQ TRAJECTORY-FOLLOWERCOMS ((FNS TRAJECTORY.FOLLOW TRAJECTORY.FOLLOWER.POINT 
                                         TRAJECTORY.FOLLOWER.PUT TRAJECTORY.FOLLOWER.SETUP 
                                         TRAJECTORY.FOLLOWER.TEST TRAJECTORY.FOLLOWER.WRAPUP)
                                    (VARS (TRAJECTORY.FOLLOWER.POINTS))
                                    (GLOBALVARS TRAJECTORY.FOLLOWER.COUNT 
                                           TRAJECTORY.FOLLOWER.LAST.TIME TRAJECTORY.FOLLOWER.POINTER 
                                           TRAJECTORY.FOLLOWER.POINTS TRAJECTORY.FOLLOWER.DELAY 
                                           TRAJECTORY.FOLLOWER.DSP TRAJECTORY.FOLLOWER.BITMAP 
                                           TRAJECTORY.FOLLOWER.HALF.WIDTH 
                                           TRAJECTORY.FOLLOWER.HALF.HEIGHT TRAJECTORY.FOLLOWER.WIDTH 
                                           TRAJECTORY.FOLLOWER.HEIGHT)
                                    (BITMAPS TRAJECTORY.FOLLOWER.DEFAULT.BITMAP 
                                           TRAJECTORY.FOLLOWER.BALL TRAJECTORY.FOLLOWER.HORIZONTAL 
                                           TRAJECTORY.FOLLOWER.VERTICAL)
                                    (FILES (SYSLOAD FROM VALUEOF LISPUSERSDIRECTORIES)
                                           READNUMBER)))
(DEFINEQ

(TRAJECTORY.FOLLOW
  [LAMBDA (KNOTS CLOSED N DELAY BITMAP WINDOW)               (* ; 
                                                           "Edited  4-Apr-88 11:51 by Briggs")
                                                             (* ; 
                                                           "Edited  22-Apr-83 17:56 by DAHJr ")
    (PROG NIL
          (TRAJECTORY.FOLLOWER.SETUP (OR WINDOW (SCREENBITMAP))
                 N DELAY (OR BITMAP TRAJECTORY.FOLLOWER.BALL))
          (DRAWCURVE KNOTS CLOSED (FUNCTION TRAJECTORY.FOLLOWER.POINT)
                 NIL
                 (OR WINDOW PROMPTWINDOW))
          (TRAJECTORY.FOLLOWER.WRAPUP])

(TRAJECTORY.FOLLOWER.POINT
  [LAMBDA (X Y WINDOW)                                       (* ; 
                                                           "Edited  4-Apr-88 11:52 by Briggs")
                                                             (* ; "Edited 19-APR-83 21:06 by DAHJr")
    (if (IGREATERP (SETQ TRAJECTORY.FOLLOWER.POINTER (IPLUS TRAJECTORY.FOLLOWER.POINTER 2))
                   TRAJECTORY.FOLLOWER.COUNT)
        then (SETQ TRAJECTORY.FOLLOWER.POINTER 1))
    (TRAJECTORY.FOLLOWER.PUT TRAJECTORY.FOLLOWER.POINTER)
    (if TRAJECTORY.FOLLOWER.DELAY
        then (DISMISS (IDIFFERENCE TRAJECTORY.FOLLOWER.DELAY (CLOCKDIFFERENCE 
                                                                        TRAJECTORY.FOLLOWER.LAST.TIME
                                                                        )))
              (SETQ TRAJECTORY.FOLLOWER.LAST.TIME (CLOCK 0)))
    (if X
        then (SETA TRAJECTORY.FOLLOWER.POINTS TRAJECTORY.FOLLOWER.POINTER (FIXR X))
              (SETA TRAJECTORY.FOLLOWER.POINTS (ADD1 TRAJECTORY.FOLLOWER.POINTER)
                    (FIXR Y))
              (TRAJECTORY.FOLLOWER.PUT TRAJECTORY.FOLLOWER.POINTER)
      else (SETA TRAJECTORY.FOLLOWER.POINTS TRAJECTORY.FOLLOWER.POINTER MAX.FIXP])

(TRAJECTORY.FOLLOWER.PUT
  [LAMBDA (POINTER)                                          (* ; 
                                                           "Edited  4-Apr-88 11:53 by Briggs")
                                                             (* ; "Edited 19-APR-83 20:57 by DAHJr")
    (PROG (X Y)
          (if (NOT (IEQP (SETQ X (ELT TRAJECTORY.FOLLOWER.POINTS POINTER))
                             MAX.FIXP))
              then (SETQ Y (ELT TRAJECTORY.FOLLOWER.POINTS (ADD1 POINTER)))
                    (BITBLT TRAJECTORY.FOLLOWER.BITMAP 0 0 TRAJECTORY.FOLLOWER.DSP (IDIFFERENCE
                                                                                    X 
                                                                       TRAJECTORY.FOLLOWER.HALF.WIDTH
                                                                                    )
                           (IDIFFERENCE Y TRAJECTORY.FOLLOWER.HALF.HEIGHT)
                           TRAJECTORY.FOLLOWER.WIDTH TRAJECTORY.FOLLOWER.HEIGHT 'INPUT 'INVERT])

(TRAJECTORY.FOLLOWER.SETUP
  [LAMBDA (DSP N DELAY BITMAP)                               (* ; 
                                                           "Edited  4-Apr-88 11:54 by Briggs")
                                                             (* ; "Edited 19-APR-83 21:05 by DAHJr")
    (PROG ((REAL.N (OR N 100))
           (REAL.BITMAP (OR BITMAP TRAJECTORY.FOLLOWER.DEFAULT.BITMAP)))
          (if (AND TRAJECTORY.FOLLOWER.POINTS (EQ (ITIMES REAL.N 2)
                                                      (ARRAYSIZE TRAJECTORY.FOLLOWER.POINTS)))
            else (SETQ TRAJECTORY.FOLLOWER.POINTS (ARRAY (ITIMES REAL.N 2)
                                                             'FIXP MAX.FIXP)))
          (SETQ TRAJECTORY.FOLLOWER.POINTER 1)
          (SETQ TRAJECTORY.FOLLOWER.COUNT REAL.N)
          (SETQ TRAJECTORY.FOLLOWER.DSP DSP)
          (SETQ TRAJECTORY.FOLLOWER.DELAY DELAY)
          (if DELAY
              then (SETQ TRAJECTORY.FOLLOWER.LAST.TIME (CLOCK 0)))
          (SETQ TRAJECTORY.FOLLOWER.BITMAP REAL.BITMAP)
          (SETQ TRAJECTORY.FOLLOWER.WIDTH (fetch (BITMAP BITMAPWIDTH) of REAL.BITMAP))
          (SETQ TRAJECTORY.FOLLOWER.HEIGHT (fetch (BITMAP BITMAPHEIGHT) of REAL.BITMAP))
          (SETQ TRAJECTORY.FOLLOWER.HALF.WIDTH (IQUOTIENT TRAJECTORY.FOLLOWER.WIDTH 2))
          (SETQ TRAJECTORY.FOLLOWER.HALF.HEIGHT (IQUOTIENT TRAJECTORY.FOLLOWER.HEIGHT 2])

(TRAJECTORY.FOLLOWER.TEST
  [LAMBDA NIL                                                (* ; 
                                                           "Edited  4-Apr-88 11:42 by Briggs")
                                                             (* ; "Edited 22-APR-83 16:17 by DAHJr")
    (PROG (KNOTS N DELAY CLOSED BITMAP)
          (printout PROMPTWINDOW 
                 "Indicate knots on a trajectory; hold down left shift key on last point")
          [SETQ KNOTS (CONS (GETPOSITION)
                            (collect (GETPOSITION) repeatuntil (KEYDOWNP 'LSHIFT]
          (SETQ N (RNUMBER "Indicate the number of points in the follower"))
          (SETQ DELAY (MAX 0 (RNUMBER "Indicate the delay per point (milliseconds)")))
          (if (ZEROP DELAY)
              then (SETQ DELAY NIL))
          [SETQ CLOSED (MENU (create MENU
                                    ITEMS _ '(OPEN CLOSED]
          [SETQ BITMAP (MENU (create MENU
                                    ITEMS _ '(("A single point" NIL)
                                              ("A horizontal line" TRAJECTORY.FOLLOWER.HORIZONTAL)
                                              ("A vertical line" TRAJECTORY.FOLLOWER.VERTICAL)
                                              ("A ball" TRAJECTORY.FOLLOWER.BALL]
          (TRAJECTORY.FOLLOWER.SETUP (SCREENBITMAP)
                 N DELAY BITMAP)
          (if (EQ CLOSED 'CLOSED)
              then (until (KEYDOWNP 'LSHIFT) do (DRAWCURVE KNOTS T (FUNCTION 
                                                                            TRAJECTORY.FOLLOWER.POINT
                                                                                )
                                                                   NIL PROMPTWINDOW))
            else (DRAWCURVE KNOTS NIL (FUNCTION TRAJECTORY.FOLLOWER.POINT)
                            NIL PROMPTWINDOW))
          (TRAJECTORY.FOLLOWER.WRAPUP])

(TRAJECTORY.FOLLOWER.WRAPUP
  [LAMBDA NIL                                                (* ; 
                                                           "Edited  4-Apr-88 11:42 by Briggs")
                                                             (* ; "Edited 19-APR-83 17:29 by DAHJr")
    (for I to TRAJECTORY.FOLLOWER.COUNT do (TRAJECTORY.FOLLOWER.POINT])
)

(RPAQQ TRAJECTORY.FOLLOWER.POINTS NIL)
(DECLARE%: DOEVAL@COMPILE DONTCOPY

(GLOBALVARS TRAJECTORY.FOLLOWER.COUNT TRAJECTORY.FOLLOWER.LAST.TIME TRAJECTORY.FOLLOWER.POINTER 
       TRAJECTORY.FOLLOWER.POINTS TRAJECTORY.FOLLOWER.DELAY TRAJECTORY.FOLLOWER.DSP 
       TRAJECTORY.FOLLOWER.BITMAP TRAJECTORY.FOLLOWER.HALF.WIDTH TRAJECTORY.FOLLOWER.HALF.HEIGHT 
       TRAJECTORY.FOLLOWER.WIDTH TRAJECTORY.FOLLOWER.HEIGHT)
)

(RPAQQ TRAJECTORY.FOLLOWER.DEFAULT.BITMAP #*(1 1)H@@@)

(RPAQQ TRAJECTORY.FOLLOWER.BALL #*(21 21)@AOL@@@@@COO@@@@@OOOH@@@AOOOL@@@COOON@@@GOOOO@@@GOOOO@@@GOOOOH@@OOOOOH@@OOOOOH@@OOOOOH@@OOOOOH@@GOOOOH@@GOOOO@@@GOOOO@@@COOON@@@COOON@@@AOOOL@@@@OOOH@@@@GOO@@@@@AOL@@@@
)

(RPAQQ TRAJECTORY.FOLLOWER.HORIZONTAL #*(18 1)OOOOL@@@)

(RPAQQ TRAJECTORY.FOLLOWER.VERTICAL 
                             #*(1 16)H@@@H@@@H@@@H@@@H@@@H@@@H@@@H@@@H@@@H@@@H@@@H@@@H@@@H@@@H@@@H@@@)
(FILESLOAD (SYSLOAD FROM VALUEOF LISPUSERSDIRECTORIES)
       READNUMBER)
(PUTPROPS TRAJECTORY-FOLLOWER COPYRIGHT ("Xerox Corporation" 1986 1988))
(DECLARE%: DONTCOPY
  (FILEMAP (NIL (1992 8891 (TRAJECTORY.FOLLOW 2002 . 2689) (TRAJECTORY.FOLLOWER.POINT 2691 . 3989) (
TRAJECTORY.FOLLOWER.PUT 3991 . 5052) (TRAJECTORY.FOLLOWER.SETUP 5054 . 6500) (TRAJECTORY.FOLLOWER.TEST
 6502 . 8493) (TRAJECTORY.FOLLOWER.WRAPUP 8495 . 8889)))))
STOP
