(FILECREATED "22-May-86 20:49:12" {QV}<ARI>NOTECARDS>ANIMATION2.;2 86261  

      changes to:  (FNS AC.CARD.RIGHTBUTTONFN AC.MAIN.MENU.WHENSELECTEDFN AC.RUN.SEQUENCE.REPEAT 
			AC.ADD.STOP.BUTTON)

      previous date: " 7-Dec-85 14:05:38" {QV}<ARI>NOTECARDS>ANIMATION2.;1)


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

(PRETTYCOMPRINT ANIMATION2COMS)

(RPAQQ ANIMATION2COMS ((FNS)
	(* * Adding the new card type)
	(FNS AC.ADD.ANIMATION.CARD.TYPE AC.ADD.FILM.SUBSTANCE.TYPE)
	(* * NoteCards Interface)
	(FNS AC.ANIMATION.CARD.MAKE.CARD.FN AC.ANIMATION.CARD.EDIT.CARD.FN 
	     AC.ANIMATION.CARD.QUIT.CARD.FN AC.ANIMATION.CARD.GET.CARD.FN AC.BUFFERED.BIN 
	     AC.ANIMATION.CARD.GET.CARD.FN2 AC.ANIMATION.CARD.PUT.CARD.FN 
	     AC.ANIMATION.CARD.PUT.CARD.FN2 AC.ANIMATION.CARD.COPY.CARD.FN 
	     AC.ANIMATION.CARD.MARK.CARD.DIRTY.FN AC.ANIMATION.CARD.CARD.DIRTYP.FN)
	(* * ACE interface)
	(FNS AC.PROCESS.TOP.LEVEL AC.WAIT.UNTIL.FREE AC.TELL.PROCESS AC.TELL.PROCESS* AC.MAKE.CARD 
	     AC.MAKE.CARD.INTERNAL AC.EDIT.CARD AC.EDIT.CARD.INTERNAL 
	     AC.INITIALIZE.SEQUENCE.AND.WINDOW AC.DEFINE.SEQUENCE.WINDOW.REGION 
	     AC.CREATE.SEQUENCE.WINDOW AC.INITIALIZE.VARS.FOR.PROCESS AC.ESTABLISH.MENUS 
	     AC.DEESTABLISH.MENUS AC.CARD.BUTTONEVENTFN AC.CARD.RIGHTBUTTONFN AC.INITIALIZE 
	     AC.INITIALIZE.DEFS AC.INITIALIZE.ACE.CONSTANTS AC.CREATE.MAIN.MENU 
	     AC.INITIALIZE.MAIN.MENU AC.INITIALIZE.NOTECARDS.MENU AC.MAIN.MENU.WHENSELECTEDFN 
	     AC.ACTIVE.WINDOW AC.RESET.ACE.VARIABLES AC.SAVE.STATE.TO.NOTECARD 
	     AC.RESTORE.STATE.FROM.NOTECARD AC.FIX.MAIN.MENU AC.INITIALIZE.STATUS.WINDOW 
	     AC.UPDATE.STATUS.WINDOW AC.DISPLAY.FRAME.NUMBER AC.MOVE.TO.NEXT.FRAME 
	     AC.MOVE.TO.PREVIOUS.FRAME AC.GOTO.FRAME.N AC.DELETE.CURRENT.FRAME BUTLAST! 
	     AC.INSERT.NEW.FRAME AC.INSERT.COPY.OF.ANOTHER.FRAME AC.COMPILE.FRAME 
	     AC.INITIALIZE.SEQUENCE AC.INITIALIZE.EDIT.FRAME.MENU AC.EDIT.FRAME.MENU.WHENSELECTEDFN 
	     AC.EDIT.FRAME2 AC.EDIT.FRAME.DISPATCH AC.EDIT.FRAME.UNDO AC.EDIT.FRAME.DONE 
	     AC.EDIT.FRAME.ABORT AC.EDIT.FRAME.WITH.PAINT AC.CONVERT.SCREEN.REGION.TO.WINDOW.REGION 
	     AC.EDIT.FRAME.CLEAR.REGION AC.EDIT.FRAME.INVERT.REGION AC.EDIT.FRAME.SET.REGION 
	     AC.TRACK.MOUSE.WITH.BITMAP AC.EDIT.FRAME.COPY.REGION AC.EDIT.FRAME.MOVE.REGION 
	     AC.EDIT.FRAME.AS.BITMAP AC.EDIT.FRAME.AS.SKETCH AC.SKETCH.MENU.WHENSELECTEDFN 
	     AC.INITIALIZE.SKETCH.MENU AC.BITBLT.FROM.SKETCH.WINDOW AC.GET.STATUS.BIT 
	     AC.SET.STATUS.BIT AC.MOVE.SEQUENCE.WINDOW.BEHIND.SKETCH.WINDOW AC.AREAFILL 
	     AC.TEXTURE.AREA AC.TEXTURE.MENU.DELETE.ITEM AC.SET.FILL.OPTION AC.RUN AC.RUN.SEQUENCE 
	     AC.RUN.SEQUENCE.REPEAT AC.ADD.STOP.BUTTON AC.RUN.SEQUENCE.REPEAT1 AC.CLEAR.AUTO.REPEAT 
	     AC.SET.AUTO.REPEAT AC.TOGGLE.AUTO.REPEAT AC.SPECIFY.SEQUENCE.WINDOW.POSITION 
	     AC.SET.TIMING.DELAYS AC.SET.TIMING.DELAYS.ALL AC.SET.TIMING.DELAYS.FRAME)
	(* * I/O and Utilities)
	(FNS AC.CHECK AC.CONFIRM AC.PRINT.MSG AC.PROMPT AC.CHECK.CURRENT.CARD AC.CHECK.CARD 
	     AC.CHECK.ALL.CARDS)
	(P (AC.INITIALIZE))
	(BITMAPS AC.ANIMATION.ICON.BITMAP)
	(P (PUTPROP (QUOTE Animation)
		    (QUOTE NCTYPEBITMAP)
		    AC.ANIMATION.ICON.BITMAP))
	(ADVISE ACE.UPD.CONTROL.WINDOW MENUBUTTONFN NC.TitleBarButtonEventFn)))
(* * Adding the new card type)

(DEFINEQ

(AC.ADD.ANIMATION.CARD.TYPE
  (LAMBDA NIL                                                (* SCB: " 7-Dec-85 14:05")
    (NCP.CreateCardType (QUOTE Animation)
			(QUOTE NoteCard)
			(QUOTE FILM)
			(QUOTE ((MakeCardFn AC.ANIMATION.CARD.MAKE.CARD.FN)
				 (EditCardFn AC.ANIMATION.CARD.EDIT.CARD.FN)
				 (QuitCardFn AC.ANIMATION.CARD.QUIT.CARD.FN)
				 (GetCardFn AC.ANIMATION.CARD.GET.CARD.FN2)
				 (PutCardFn AC.ANIMATION.CARD.PUT.CARD.FN2)
				 (CopyCardFn AC.ANIMATION.CARD.COPY.CARD.FN)
				 (MarkCardDirtyFn AC.ANIMATION.CARD.MARK.CARD.DIRTY.FN)
				 (CardDirtyPFn AC.ANIMATION.CARD.CARD.DIRTYP.FN)
				 (CollectLinksInCardFn NILL)
				 (DeleteLinksInCardFn NILL)
				 (UpdateLinkIconsInCardFn NILL)
				 (InsertLinkInCardFn NILL)
				 (TranslateWindowPositionToCardPositionFn NILL)))
			(QUOTE ((CardDisplayedInMenuFlg T)
				 (CardDefaultWidth 300)
				 (CardDefaultHeight 200)
				 (LinkDisplayMode NIL)
				 (CardLinkAnchorModesSupported NIL))))))

(AC.ADD.FILM.SUBSTANCE.TYPE
  (LAMBDA NIL                                                (* SCB: "11-Oct-85 12:33")
    (NCP.CreateSubstanceType (QUOTE FILM)
			     (QUOTE ((CreateSubstanceFn NILL)
				      (EditSubstanceFn NILL)
				      (QuitSubstanceFn NILL)
				      (GetSubstanceFn NILL)
				      (PutSubstanceFn NILL)
				      (CopySubstanceFn NILL)
				      (MarkSubstanceDirtyFn NILL)
				      (SubstanceDirtyPFn NILL)
				      (CollectLinksInSubstanceFn NILL)
				      (DeleteLinksInSubstanceFn NILL)
				      (UpdateLinkIconsInSubstanceFn NILL)
				      (InsertLinkInSubstanceFn NILL)
				      (TranslateWindowPosititionToSubstancePositionFn NILL)))
			     NIL)))
)
(* * NoteCards Interface)

(DEFINEQ

(AC.ANIMATION.CARD.MAKE.CARD.FN
  (LAMBDA (ID TITLE NODISPLAYFLG)                            (* SCB: "30-Sep-85 15:14")
    (PROG (WINDOW)
          (SETQ WINDOW (AC.MAKE.CARD ID TITLE NODISPLAYFLG))
          (RETURN (COND
		    ((NULL NODISPLAYFLG)
		      WINDOW)
		    (T ID))))))

(AC.ANIMATION.CARD.EDIT.CARD.FN
  (LAMBDA (ID SUBSTANCE REGION/POSITION)                     (* SCB: " 2-Oct-85 21:51")
    (LET ((WINDOW (NCP.CardWindow ID))
       PROCESS)
      (COND
	((AND WINDOW (PROCESSP (SETQ PROCESS (WINDOWPROP WINDOW (QUOTE PROCESS)))))
	  (TOTOPW WINDOW)
	  (RPTQ 2 (FLASHW WINDOW))
	  (TTY.PROCESS PROCESS))
	(T (AC.EDIT.CARD ID SUBSTANCE REGION/POSITION))))))

(AC.ANIMATION.CARD.QUIT.CARD.FN
  (LAMBDA (WINDOWORSUBSTANCEORID)                            (* SCB: "11-Oct-85 16:22")
    (PROG (ID WINDOW PROCESS)
          (SETQ ID (NC.CoerceToID WINDOWORSUBSTANCEORID))    (* SETQ WINDOW (NCP.CardWindow ID))
          (SETQ WINDOW (NC.FetchWindow ID))
          (COND
	    ((WINDOWP WINDOW)
	      (DETACHALLWINDOWS WINDOW)
	      (CLOSEW WINDOW)
	      (COND
		((PROCESSP (SETQ PROCESS (WINDOWPROP WINDOW (QUOTE PROCESS)
						     NIL)))
		  (DEL.PROCESS PROCESS)))))
          (TTY.PROCESS T)
          (NC.DeactivateCard ID))))

(AC.ANIMATION.CARD.GET.CARD.FN
  (LAMBDA (DATABASESTREAM ID REGION)                         (* SCB: "21-Oct-85 17:18")
    (REPLACEFIELD (QUOTE (STREAM 44 POINTER))
		  DATABASESTREAM
		  (FUNCTION AC.BUFFERED.BIN))
    (NC.GetPtr DATABASESTREAM 6)
    (HREAD DATABASESTREAM)))

(AC.BUFFERED.BIN
  (LAMBDA (STREAM)                                           (* SCB: "21-Oct-85 17:00")
    (BLOCK)
    (\BUFFERED.BIN STREAM)))

(AC.ANIMATION.CARD.GET.CARD.FN2
  (LAMBDA (DATABASESTREAM ID REGION)                         (* SCB: " 7-Dec-85 13:49")
    (REPLACEFIELD (QUOTE (STREAM 44 POINTER))
		  DATABASESTREAM
		  (FUNCTION AC.BUFFERED.BIN))
    (NC.GetPtr DATABASESTREAM 6)
    (LET ((LENGTH (READ DATABASESTREAM))
       BITMAP.SEQUENCE SKETCH.SEQUENCE STATUS.SEQUENCE)
      (SETQ BITMAP.SEQUENCE
	(for I from 1 to LENGTH collect
	     (LET (FRAME.DELAY FRAME.LENGTH BLITS)
	       (SETQ FRAME.DELAY (READ DATABASESTREAM))
	       (SETQ FRAME.LENGTH (READ DATABASESTREAM))
	       (SETQ BLITS (for I from 1 to FRAME.LENGTH collect
				(LET (BITMAP XCOOR YCOOR)
				  (\BIN DATABASESTREAM)      (* Throw away CR.)
				  (SETQ BITMAP (\READBINARYBITMAP DATABASESTREAM))
				  (SETQ XCOOR (READ DATABASESTREAM))
				  (SETQ YCOOR (READ DATABASESTREAM))
				  (create ACE.BLIT BITMAP ← BITMAP XCOOR ← XCOOR YCOOR ← YCOOR))))
	       (create ACE.FRAME DELAY ← FRAME.DELAY BLITS ← BLITS))))
      (SETQ SKETCH.SEQUENCE (HREAD DATABASESTREAM))
      (SETQ STATUS.SEQUENCE (HREAD DATABASESTREAM))
      (create FILM BITMAP.SEQUENCE ← BITMAP.SEQUENCE SKETCH.SEQUENCE ← SKETCH.SEQUENCE 
	      STATUS.SEQUENCE ← STATUS.SEQUENCE))))

(AC.ANIMATION.CARD.PUT.CARD.FN
  (LAMBDA (ID DATABASESTREAM)                                (* SCB: "20-Sep-85 15:43")
    (PROG (STARTPTR ENDPTR ENDPTRLOC)
          (SETQ STARTPTR (IPLUS 6 (GETFILEPTR DATABASESTREAM)))
          (NC.PutPtr DATABASESTREAM STARTPTR)
          (SETQ ENDPTRLOC (GETFILEPTR DATABASESTREAM))
          (NC.PutPtr DATABASESTREAM 0)
          (HPRINT (NC.FetchSubstance ID)
		  DATABASESTREAM T NIL)
          (SETQ ENDPTR (GETFILEPTR DATABASESTREAM))
          (SETFILEPTR DATABASESTREAM ENDPTRLOC)
          (NC.PutPtr DATABASESTREAM ENDPTR))))

(AC.ANIMATION.CARD.PUT.CARD.FN2
  (LAMBDA (ID DATABASESTREAM)                                (* SCB: " 7-Dec-85 12:55")
    (PROG (STARTPTR ENDPTR ENDPTRLOC)
          (SETQ STARTPTR (IPLUS 6 (GETFILEPTR DATABASESTREAM)))
          (NC.PutPtr DATABASESTREAM STARTPTR)
          (SETQ ENDPTRLOC (GETFILEPTR DATABASESTREAM))
          (NC.PutPtr DATABASESTREAM 0)
          (LET* ((SUBSTANCE (NC.FetchSubstance ID))
	     (BITMAP.SEQUENCE (fetch (FILM BITMAP.SEQUENCE)
				     of SUBSTANCE)))
	    (PRINT (LENGTH BITMAP.SEQUENCE)
		   DATABASESTREAM)
	    (for FRAME in BITMAP.SEQUENCE do (PRINT (fetch (ACE.FRAME DELAY)
							   of FRAME)
						    DATABASESTREAM)
		 (PRINT (LENGTH (fetch (ACE.FRAME BLITS)
				       of FRAME))
			DATABASESTREAM)
		 (for BLIT in (fetch (ACE.FRAME BLITS)
				     of FRAME)
		      do
		      (\PRINTBINARYBITMAP (fetch (ACE.BLIT BITMAP)
						 of BLIT)
					  DATABASESTREAM)
		      (PRINT (fetch (ACE.BLIT XCOOR)
				    of BLIT)
			     DATABASESTREAM)
		      (PRINT (fetch (ACE.BLIT YCOOR)
				    of BLIT)
			     DATABASESTREAM)))
	    (HPRINT (fetch (FILM SKETCH.SEQUENCE)
			   of SUBSTANCE)
		    DATABASESTREAM T T)
	    (HPRINT (fetch (FILM STATUS.SEQUENCE)
			   of SUBSTANCE)
		    DATABASESTREAM T T))
          (SETQ ENDPTR (GETFILEPTR DATABASESTREAM))
          (SETFILEPTR DATABASESTREAM ENDPTRLOC)
          (NC.PutPtr DATABASESTREAM ENDPTR))))

(AC.ANIMATION.CARD.COPY.CARD.FN
  (LAMBDA (ID FROMSTREAM TOSTREAM)                           (* SCB: "21-Sep-85 16:19")
    (PROG (ENDPTR ENDPTRLOC FROMSTARTPTR FROMENDPTR TOSTARTPTR)
          (SETQ FROMSTARTPTR (NC.GetPtr FROMSTREAM))
          (SETQ FROMENDPTR (NC.GetPtr FROMSTREAM))
          (SETQ TOSTARTPTR (IPLUS 6 (GETFILEPTR TOSTREAM)))
          (NC.PutPtr TOSTREAM TOSTARTPTR)
          (SETQ ENDPTRLOC (GETFILEPTR TOSTREAM))
          (NC.PutPtr TOSTREAM 0)
          (COPYBYTES FROMSTREAM TOSTREAM FROMSTARTPTR FROMENDPTR)
          (SETQ ENDPTR (GETFILEPTR TOSTREAM))
          (SETFILEPTR TOSTREAM ENDPTRLOC)
          (NC.PutPtr TOSTREAM ENDPTR)
          (RETURN T))))

(AC.ANIMATION.CARD.MARK.CARD.DIRTY.FN
  (LAMBDA (ID RESETFLG)                                      (* SCB: "15-Sep-85 19:22")
    (PUTPROP ID (QUOTE DIRTY)
	     RESETFLG)))

(AC.ANIMATION.CARD.CARD.DIRTYP.FN
  (LAMBDA (ID)                                               (* SCB: "20-Sep-85 10:29")
    (OR (GETPROP ID (QUOTE DIRTY))
	(GETPROP ID (QUOTE EDITED)))))
)
(* * ACE interface)

(DEFINEQ

(AC.PROCESS.TOP.LEVEL
  (LAMBDA (ID)                                               (* SCB: " 2-Oct-85 21:45")
    (PROG (AC.PROCESS.MESSAGE AC.RECORD ACE.CURRENT.SEQUENCE AC.SKETCH.SEQUENCE AC.STATUS.SEQUENCE 
			      ACE.SEQ.WINDOW ACE.SEQ.WIDTH ACE.SEQ.HEIGHT ACE.CURRENT.FRAME 
			      ACE.FRAME.TAIL AC.CURRENT.FRAME.NUMBER AC.SKETCH.WINDOW 
			      AC.SKETCH.BITMAP AC.STATUS.WINDOW AC.DEFAULT.DELAY AC.BOUNDARY.VALUE 
			      AC.FILL.VALUE AC.REMEMBER.REGION)
      LOOP(ERSETQ (PROGN (SETQ AC.PROCESS.MESSAGE NIL)
			 (BLOCK T)
			 (EVAL AC.PROCESS.MESSAGE))
		  T)
          (GO LOOP))))

(AC.WAIT.UNTIL.FREE
  (LAMBDA (PROCESS)                                          (* SCB: "30-Sep-85 19:32")
    (until (NULL (PROCESS.EVALV PROCESS (QUOTE AC.PROCESS.MESSAGE))) do (BLOCK))))

(AC.TELL.PROCESS
  (LAMBDA (PROCESS MESSAGE)                                  (* SCB: "21-Oct-85 12:32")
    (AC.WAIT.UNTIL.FREE PROCESS)
    (PROCESS.EVAL PROCESS (BQUOTE (SETQ AC.PROCESS.MESSAGE (QUOTE , MESSAGE)))
		  T)                                         (* WAKE.PROCESS PROCESS T)
    (AC.WAIT.UNTIL.FREE PROCESS)))

(AC.TELL.PROCESS*
  (LAMBDA (PROCESS MESSAGE)                                  (* SCB: "21-Oct-85 12:32")
                                                             (* This version doesn't wait for the other process to 
							     finish before returning.)
    (AC.WAIT.UNTIL.FREE PROCESS)
    (PROCESS.EVAL PROCESS (BQUOTE (SETQ AC.PROCESS.MESSAGE (QUOTE , MESSAGE)))
		  NIL)))

(AC.MAKE.CARD
  (LAMBDA (ID TITLE NODISPLAYFLG)                            (* SCB: "30-Sep-85 20:30")
    (PROG (PROCESS)
          (SETQ PROCESS (ADD.PROCESS (BQUOTE (AC.PROCESS.TOP.LEVEL (QUOTE , ID)))))
          (AC.TELL.PROCESS PROCESS (BQUOTE (AC.MAKE.CARD.INTERNAL (QUOTE , ID)
								  (QUOTE , TITLE)
								  (QUOTE , NODISPLAYFLG)
								  (QUOTE , PROCESS))))
          (RETURN (PROCESS.EVALV PROCESS (QUOTE ACE.SEQ.WINDOW))))))

(AC.MAKE.CARD.INTERNAL
  (LAMBDA (ID TITLE NODISPLAYFLG PROCESS)                    (* SCB: "22-Oct-85 08:51")
    (AC.RESET.ACE.VARIABLES)
    (SETQ WINDOW (AC.INITIALIZE.SEQUENCE.AND.WINDOW ID NODISPLAYFLG))
    (AND WINDOW (WINDOWPROP WINDOW (QUOTE PROCESS)
			    PROCESS))
    (NC.SetSubstance ID AC.RECORD)
    (PUTPROP ID (QUOTE EDITED)
	     NIL)
    (NCP.CardProp ID (QUOTE AUTO.REPEAT)
		  NIL)))

(AC.EDIT.CARD
  (LAMBDA (ID SUBSTANCE REGION/POSITION)                     (* SCB: " 1-Oct-85 19:49")
    (PROG (PROCESS)
          (SETQ PROCESS (ADD.PROCESS (BQUOTE (AC.PROCESS.TOP.LEVEL (QUOTE , ID)))))
          (AC.TELL.PROCESS PROCESS (BQUOTE (AC.EDIT.CARD.INTERNAL (QUOTE , ID)
								  (QUOTE , SUBSTANCE)
								  (QUOTE , REGION/POSITION)
								  (QUOTE , PROCESS))))
          (COND
	    ((NCP.CardProp ID (QUOTE AUTO.REPEAT))
	      (AC.TELL.PROCESS* PROCESS (QUOTE (AC.RUN.SEQUENCE.REPEAT)))))
          (RETURN (PROCESS.EVALV PROCESS (QUOTE ACE.SEQ.WINDOW))))))

(AC.EDIT.CARD.INTERNAL
  (LAMBDA (ID SUBSTANCE REGION/POSITION PROCESS)             (* SCB: " 3-Oct-85 13:36")
    (PROG (REGION WINDOW)
          (AC.RESET.ACE.VARIABLES)
          (AC.RESTORE.STATE.FROM.NOTECARD ID)
          (COND
	    ((SETQ REGION (NCP.CardProp ID (QUOTE CARD.ORIGINAL.REGION))))
	    (T (SETQ REGION (GETBOXREGION ACE.SEQ.WIDTH ACE.SEQ.HEIGHT))))
          (SETQ WINDOW (AC.CREATE.SEQUENCE.WINDOW REGION (NCP.CardTitle ID)))
          (WINDOWPROP WINDOW (QUOTE PROCESS)
		      PROCESS)
          (TTY.PROCESS PROCESS)
          (PUTPROP ID (QUOTE EDITED)
		   NIL)
          (PUTPROP ID (QUOTE DIRTY)
		   NIL)
          (ACE.QUICKDRAW&UPD (LIST (CAR ACE.CURRENT.SEQUENCE))))))

(AC.INITIALIZE.SEQUENCE.AND.WINDOW
  (LAMBDA (ID NODISPLAYFLG)                                  (* SCB: "22-Oct-85 09:12")
    (PROG (REGION TITLE WINDOW)
          (SETQ TITLE (NCP.CardTitle ID))
          (COND
	    ((NULL NODISPLAYFLG)
	      (AC.PRINT.MSG "Specify SIZE of the NEW Sequence.")
	      (SETQ REGION (AC.DEFINE.SEQUENCE.WINDOW.REGION))
	      (SETQ WINDOW (AC.CREATE.SEQUENCE.WINDOW REGION TITLE))
	      (COND
		(AC.REMEMBER.REGION (NCP.CardProp ID (QUOTE CARD.ORIGINAL.REGION)
						  REGION))
		(T (NCP.CardProp ID (QUOTE CARD.ORIGINAL.POSITION)
				 NIL))))
	    (T (SETQ REGION (CREATEREGION 100 100 (NCP.CardTypeInheritedField (QUOTE Animation)
									      (QUOTE CardDefaultWidth)
									      )
					  (NCP.CardTypeInheritedField (QUOTE Animation)
								      (QUOTE CardDefaultHeight))))))
          (SETQ ACE.SEQ.WIDTH (fetch (REGION WIDTH) of REGION))
          (SETQ ACE.SEQ.HEIGHT (fetch (REGION HEIGHT) of REGION))
          (SETQ ACE.CURRENT.SEQUENCE (LIST (create ACE.FRAME
						   DELAY ← AC.DEFAULT.DELAY
						   BLITS ←(LIST (create ACE.BLIT
									BITMAP ←(BITMAPCREATE 
										    ACE.SEQ.WIDTH 
										   ACE.SEQ.HEIGHT 1)
									XCOOR ← 0
									YCOOR ← 0)))))
          (SETQ AC.SKETCH.SEQUENCE (LIST NIL))
          (SETQ AC.STATUS.SEQUENCE (LIST NIL))
          (SETQ AC.RECORD (create FILM
				  BITMAP.SEQUENCE ← ACE.CURRENT.SEQUENCE
				  SKETCH.SEQUENCE ← AC.SKETCH.SEQUENCE
				  STATUS.SEQUENCE ← AC.STATUS.SEQUENCE))
          (AC.ANIMATION.CARD.MARK.CARD.DIRTY.FN ID T)
          (AC.SAVE.STATE.TO.NOTECARD ID)
          (SETQ ACE.CURRENT.FRAME ACE.CURRENT.SEQUENCE)
          (SETQ ACE.FRAME.TAIL NIL)
          (RETURN WINDOW))))

(AC.DEFINE.SEQUENCE.WINDOW.REGION
  (LAMBDA (RESIZEP)                                          (* SCB: "15-Oct-85 17:11")
    (PROG (REGION WIDTH HEIGHT)
          (COND
	    ((OR RESIZEP (NULL (AND ACE.SEQ.WIDTH ACE.SEQ.HEIGHT)))
                                                             (* If they explicitly asked for resize, or if we don't 
							     know the size, then resize.)
	      (CURSOR DEFAULTCURSOR)
	      (SELECTQ (MENU (COND
			       ((type? MENU AC.SPECIFY.WINDOW.SIZE.MENU)
				 AC.SPECIFY.WINDOW.SIZE.MENU)
			       (T (SETQ AC.SPECIFY.WINDOW.SIZE.MENU
				    (create MENU
					    ITEMS ←(QUOTE (("Use Mouse" (QUOTE MOUSE)
									
					 "Specify card region using the mouse (unlock the card).")
							    ("Type in Coordinates" (QUOTE TYPEIN)
										   
				 "Type in the size and position of the card (and lock the card).")))
					    TITLE ← "Specify Size"
					    CENTERFLG ← T)))))
		       (MOUSE (SETQ REGION (GETREGION))
			      (SETQ AC.REMEMBER.REGION NIL))
		       (TYPEIN (PROG (XPOS YPOS)
				     (SETQ WIDTH (AC.PROMPT "Width of window = ?"))
				     (SETQ HEIGHT (AC.PROMPT "Height of window = ?"))
				     (SETQ XPOS (AC.PROMPT "X-position of lower left corner = ?"))
				     (SETQ YPOS (AC.PROMPT "Y-position of lower left corner = ?"))
				     (SETQ REGION (CREATEREGION XPOS YPOS WIDTH HEIGHT))
				     (SETQ AC.REMEMBER.REGION T)))
		       (PROGN                                (* DO NOTHING)
			      NIL)))
	    (T (SETQ REGION (GETBOXPOSITION ACE.SEQ.WIDTH ACE.SEQ.HEIGHT))))
          (RETURN REGION))))

(AC.CREATE.SEQUENCE.WINDOW
  (LAMBDA (REGION TITLE)                                     (* SCB: " 1-Oct-85 16:34")
    (PROG (WINDOW)
          (SETQ WINDOW (CREATEW REGION (OR TITLE "Untitled")
				NIL T))
          (AC.ESTABLISH.MENUS WINDOW)
          (AC.INITIALIZE.STATUS.WINDOW WINDOW)
          (SETQ AC.CURRENT.FRAME.NUMBER 1)
          (AC.UPDATE.STATUS.WINDOW)
          (AC.INITIALIZE.VARS.FOR.PROCESS)
          (SETQ ACE.SEQ.WINDOW WINDOW)
          (RETURN WINDOW))))

(AC.INITIALIZE.VARS.FOR.PROCESS
  (LAMBDA NIL                                                (* SCB: " 1-Oct-85 16:34")
    (SETQ AC.BOUNDARY.VALUE 1)
    (SETQ AC.FILL.VALUE 1)
    (SETQ AC.DEFAULT.DELAY 200)))

(AC.ESTABLISH.MENUS
  (LAMBDA (WINDOW)                                           (* SCB: "15-Oct-85 16:22")
    (WINDOWPROP WINDOW (QUOTE TitleBarMiddleButtonMenu)
		AC.MAIN.MENU)
    (WINDOWPROP WINDOW (QUOTE TitleBarLeftButtonMenu)
		AC.NOTECARDS.MENU)
    (WINDOWPROP WINDOW (QUOTE OLDBUTTONEVENTFN)
		(FUNCTION AC.CARD.BUTTONEVENTFN))
    (WINDOWPROP WINDOW (QUOTE BUTTONEVENTFN)
		(FUNCTION NC.TitleBarButtonEventFn))
    (WINDOWPROP WINDOW (QUOTE RIGHTBUTTONFN)
		(FUNCTION AC.CARD.RIGHTBUTTONFN))))

(AC.DEESTABLISH.MENUS
  (LAMBDA (WINDOW)                                           (* SCB: "18-Oct-85 14:30")
    (WINDOWPROP WINDOW (QUOTE TitleBarMiddleButtonMenu)
		NIL)
    (WINDOWPROP WINDOW (QUOTE TitleBarLeftButtonMenu)
		NIL)
    (WINDOWPROP WINDOW (QUOTE OLDBUTTONEVENTFN)
		NIL)
    (WINDOWPROP WINDOW (QUOTE BUTTONEVENTFN)
		NIL)
    (WINDOWPROP WINDOW (QUOTE RIGHTBUTTONFN)
		(FUNCTION NILL))))

(AC.CARD.BUTTONEVENTFN
  (LAMBDA (WINDOW)                                           (* SCB: " 2-Oct-85 21:54")
    (PROG (PROCESS)
          (SETQ PROCESS (WINDOWPROP AC.CURRENT.WINDOW (QUOTE PROCESS)))
          (TOTOPW WINDOW)
          (TTY.PROCESS PROCESS)
          (COND
	    ((LASTMOUSESTATE (ONLY LEFT))
	      (AC.TELL.PROCESS* PROCESS (QUOTE (AC.RUN.SEQUENCE))))
	    ((LASTMOUSESTATE (ONLY MIDDLE))
	      (MENU AC.MAIN.MENU))))))

(AC.CARD.RIGHTBUTTONFN
  (LAMBDA (WINDOW)                                           (* SCB: "22-May-86 20:47")
    (PROG (OP)
	    (SETQ OP (MENU (COND
				 ((type? MENU AC.RIGHT.BUTTON.MENU)
				   AC.RIGHT.BUTTON.MENU)
				 (T (SETQ AC.RIGHT.BUTTON.MENU
				      (create MENU ITEMS ←
					      (QUOTE ((Close (QUOTE CLOSEW)
							       "Closes a window")
							 (Bury (QUOTE BURYW)
							       "Puts a window on the bottom.")
							 (Hardcopy (QUOTE HARDCOPYIMAGEW)
								   
							  "Prints a window using its HARDCOPYFN."
								   (SUBITEMS ("To a file"
									       (QUOTE 
									    HARDCOPYIMAGEW.TOFILE)
									       
					  "Puts image on a file; prompts for filename and format")
									     ("To a printer"
									       (QUOTE 
									 HARDCOPYIMAGEW.TOPRINTER)
									       
						      "Sends image to a printer of your choosing")))
							 (Move (QUOTE MOVEW)
							       "Moves a window by a corner.")
							 (Shrink (QUOTE SHRINKW)
								 
		       "Replaces this window with its icon (or title if it doesn't have an icon.")))
					      CENTERFLG ← T))))))
	    (COND
	      (OP (APPLY* OP WINDOW))))))

(AC.INITIALIZE
  (LAMBDA NIL                                                (* SCB: "17-Oct-85 16:53")
    (AC.INITIALIZE.ACE.CONSTANTS)
    (AC.INITIALIZE.MAIN.MENU)
    (AC.INITIALIZE.NOTECARDS.MENU)
    (AC.INITIALIZE.EDIT.FRAME.MENU)
    (AC.INITIALIZE.SKETCH.MENU)
    (AC.INITIALIZE.DEFS)
    (SETQ AC.SPECIFY.WINDOW.SIZE.MENU NIL)
    (SETQ AC.SPECIFY.WINDOW.POSITION.MENU NIL)
    (SETQ AC.AREAFILL.OPTIONS.MENU NIL)
    (SETQ AC.RIGHT.BUTTON.MENU NIL)
    (AC.ADD.FILM.SUBSTANCE.TYPE)
    (AC.ADD.ANIMATION.CARD.TYPE)))

(AC.INITIALIZE.DEFS
  (LAMBDA NIL                                                (* SCB: "24-Sep-85 15:06")
    (RECORD FILM (BITMAP.SEQUENCE SKETCH.SEQUENCE STATUS.SEQUENCE))))

(AC.INITIALIZE.ACE.CONSTANTS
  (LAMBDA NIL                                                (* SCB: "25-Sep-85 16:28")
    (SETQ ACE.SEQ.WINDOW.XOFF 0)
    (SETQ ACE.SEQ.WINDOW.YOFF 0)
    (SETQ ACE.VERTICAL.BLOCK 16)
    (SETQ ACE.AREA.THRESHOLD 50)
    (SETQ ACE.RUNNING.UNDER.TRILLIUM NIL)                    (* ACE.LEFTMOUSE.CURSOR ACE.MIDDLEMOUSE.CURSOR 
							     ACE.RIGHTMOUSE.CURSOR ACE.ALLMOUSE.CURSOR are set by 
							     loading ACE-MAIN)
    (SETQ ACE.CONTROL.WINDOW NIL)
    (SETQ ACE.DIRECTORY NIL)
    (SETQ ACE.CURRENT.SEQUENCE.NAME NIL)
    (SETQ AC.DEFAULT.DELAY 250)))

(AC.CREATE.MAIN.MENU
  (LAMBDA (ADD.FIX.ITEM)                                     (* SCB: "19-Oct-85 11:50")
    (create MENU
	    ITEMS ←(APPEND (QUOTE (("Sequence Management" NOOP 
							  "Get submenu of less common operations"
							  (SUBITEMS ("Set Timing Delays"
								      SET.TIMING.DELAYS 
								      "Set the timing delays"
								      (SUBITEMS (
"Set the delay for individual frames" SET.TIMING.DELAYS.FRAME "Set different delays for each frame.")
										(
"Set interframe delay for sequence" SET.TIMING.DELAYS.ALL "Set one delay for all frames.")))
								    ("Auto Repeat"
								      AUTO.REPEAT 
						      "Toggle the auto repeat flag for this card"
								      (SUBITEMS ("Set Auto Repeat"
										  SET.AUTO.REPEAT 
				   "Make this card automatically repeat when the card is opened.")
										("Clear Auto Repeat"
										  CLEAR.AUTO.REPEAT 
							"Turn off the auto repeat for this card.")))
								    ("Change Card Screen Position"
								      CHANGE.CARD.SCREEN.POSITION 
								"Lock/Unlock the card's position")))))
			   (QUOTE (("Next Frame" NEXT.FRAME "Move to the next frame in the sequence.")
				    ))
			   (QUOTE (("Previous Frame" PREVIOUS.FRAME 
						    "Move to the previous frame in the sequence.")))
			   (QUOTE (("Goto Frame" GOTO.FRAME "Move to a given frame in the sequence."))
				  )
			   (QUOTE (("Insert New Frame" INSERT.NEW.FRAME 
				    "Insert a copy of the current frame after the current frame.")))
			   (QUOTE (("Insert Another Frame" INSERT.COPY.OF.ANOTHER.FRAME 
				     "Insert of a copy of a given frame after the current frame.")))
			   (QUOTE (("Delete Current Frame" DELETE.CURRENT.FRAME 
					      "Delete the current frame.  Asks for confirmation.")))
			   (QUOTE (("Run Sequence" RUN.SEQUENCE "Run the entire movie.")))
			   (QUOTE (("Repeat Sequence" REPEAT.SEQUENCE "Run the movie, over and over.")
				    ))
			   (QUOTE (("Edit Frame" EDIT.FRAME "Enter the edit frame submode.")))
			   (AND ADD.FIX.ITEM (QUOTE (("Fix Menu" FIX.MENU 
							"Lock this menu to the side of the card.")))))
	    WHENSELECTEDFN ←(QUOTE AC.MAIN.MENU.WHENSELECTEDFN)
	    TITLE ← "Choose Operation"
	    CENTERFLG ← T
	    MENUCOLUMNS ← 1)))

(AC.INITIALIZE.MAIN.MENU
  (LAMBDA NIL                                                (* SCB: "28-Sep-85 21:55")
    (SETQ AC.MAIN.MENU (AC.CREATE.MAIN.MENU T))
    (SETQ AC.MAIN.MENU.FIXED (AC.CREATE.MAIN.MENU NIL))))

(AC.INITIALIZE.NOTECARDS.MENU
  (LAMBDA NIL                                                (* SCB: "25-Sep-85 21:46")
    (SETQ AC.NOTECARDS.MENU (create MENU
				    ITEMS ←(QUOTE ((Edit% Property% List (FUNCTION NC.EditProperties)
									 
					"Brings up an editor for the property list of this card.")
						    (Show% Links (FUNCTION NC.ShowPointers)
								 
					   "Brings up a list of the links to and from this card.")
						    (Title/Sources/FileBoxes
						      (FUNCTION (LAMBDA (TextStream)
							  (NC.AssignTitle TextStream)
							  (NC.AssignSources TextStream)
							  (NC.FileNoteCard TextStream)))
						      
		       "Do all of the operations necessary to file this note card in a file box."
						      (SUBITEMS (Assign% Title
								  (FUNCTION NC.AssignTitle)
								  
						       "Assigns a (new) title to this note card.")
								(Designate% Sources
								  (FUNCTION NC.AssignSources)
								  
				       "Designate the source(s) of the information in this card.")
								(File% in% FileBoxes
								  (FUNCTION NC.FileNoteCard)
								  
						 "File this note card in one or more file boxes.")
								(Unfile% from% FileBoxes
								  (FUNCTION NC.UnfileNoteCard)
								  
					   "Remove this card from one or more of its file boxes.")
								(Delete% Source
								  (FUNCTION NC.DeleteSource)
								  
							"Delete one of the sources of this card.")))
						    (Insert% Link
						      (FUNCTION NC.AddLinkToGraphCard)
						      "Add a node that points to another note card."
						      (SUBITEMS (Insert% Link (FUNCTION 
									    NC.AddLinkToGraphCard)
									      
						   "Add a node that points to another note card.")
								(Add% Global% Link
								  (FUNCTION NC.AddGlobalLinkToCard)
								  
						    "Add a global link emanating from this card.")
								(Add% Global% Links
								  (FUNCTION NC.AddGlobalLinksToCard)
								  
						     "Add global links emanating from this card.")))
						    (Close% and% Save
						      (FUNCTION CLOSEW)
						      
					  "Close this note card after saving it in the NoteFile."
						      (SUBITEMS (Close% and% Save
								  (FUNCTION CLOSEW)
								  
					  "Close this note card after saving it in the NoteFile.")
								(Close% w/o% Saving
								  (FUNCTION NC.QuitWithoutSaving)
								  
		      "Close this note card without saving any changes made since the last Save.")
								(Save% in% NoteFile
								  (FUNCTION NC.CardSaveFn)
								  
				       "Save this card in the NoteFile but don't close the card.")
								(Delete% Card (FUNCTION 
									       NC.DeleteNoteCards)
									      
						"Permenantly delete this card from the NoteFile.")))))
				    CENTERFLG ← T
				    MENUFONT ←(FONTCREATE (QUOTE HELVETICA)
							  10
							  (QUOTE BOLD))))))

(AC.MAIN.MENU.WHENSELECTEDFN
  (LAMBDA (ITEM MENU MOUSE.KEY)                              (* SCB: "22-May-86 20:43")
    (PROG (WINDOW ID PROCESS MESSAGE)
	    (SETQ WINDOW (AC.ACTIVE.WINDOW))
	    (SETQ ID (NCP.CardFromWindow WINDOW))
	    (SETQ PROCESS (WINDOWPROP WINDOW (QUOTE PROCESS)))
	    (COND
	      ((NULL (AND ID WINDOW PROCESS))
		(SHOULDNT "Can find ID or WINDOW or PROCESS for this menu.")))
                                                             (* If the guy is in the middle of Repeat Sequence.
							     Flush menu operations until he stops the movie.)
	    (AND (WINDOWPROP WINDOW (QUOTE AC.STOP.WINDOW))
		   (RETURN))
	    (SETQ MESSAGE (SELECTQ (CADR ITEM)
				       (AUTO.REPEAT (BQUOTE (AC.TOGGLE.AUTO.REPEAT (QUOTE
											 , ID))))
				       (SET.AUTO.REPEAT (BQUOTE (AC.SET.AUTO.REPEAT (QUOTE
											  , ID))))
				       (CLEAR.AUTO.REPEAT (BQUOTE (AC.CLEAR.AUTO.REPEAT
								      (QUOTE , ID))))
				       (CHANGE.CARD.SCREEN.POSITION (BQUOTE (
							      AC.SPECIFY.SEQUENCE.WINDOW.POSITION
										(QUOTE , ID))))
				       (NEXT.FRAME (QUOTE (AC.MOVE.TO.NEXT.FRAME)))
				       (PREVIOUS.FRAME (QUOTE (AC.MOVE.TO.PREVIOUS.FRAME)))
				       (GOTO.FRAME (QUOTE (AC.GOTO.FRAME.N)))
				       (INSERT.NEW.FRAME (BQUOTE (AC.INSERT.NEW.FRAME
								     (QUOTE , ID))))
				       (INSERT.COPY.OF.ANOTHER.FRAME (BQUOTE (
								  AC.INSERT.COPY.OF.ANOTHER.FRAME
										 (QUOTE , ID))))
				       (DELETE.CURRENT.FRAME (BQUOTE (AC.DELETE.CURRENT.FRAME
									 (QUOTE , ID))))
				       (SET.TIMING.DELAYS (BQUOTE (AC.SET.TIMING.DELAYS
								      (QUOTE , ID))))
				       (SET.TIMING.DELAYS.FRAME (BQUOTE (
								       AC.SET.TIMING.DELAYS.FRAME
									    (QUOTE , ID))))
				       (SET.TIMING.DELAYS.ALL (BQUOTE (AC.SET.TIMING.DELAYS.ALL
									  (QUOTE , ID))))
				       (RUN.SEQUENCE (QUOTE (AC.RUN.SEQUENCE)))
				       (REPEAT.SEQUENCE (QUOTE (AC.RUN.SEQUENCE.REPEAT)))
				       (EDIT.FRAME (BQUOTE (AC.EDIT.FRAME2 (QUOTE , ID)
									       (QUOTE , WINDOW))))
				       (FIX.MENU (BQUOTE (AC.FIX.MAIN.MENU (QUOTE , WINDOW))))
				       (NOOP NIL)
				       (ERROR "UNDEFINED OPERATION AC.MAIN.MENU" ITEM)))
	    (AC.TELL.PROCESS* PROCESS MESSAGE))))

(AC.ACTIVE.WINDOW
  (LAMBDA NIL                                                (* SCB: " 1-Oct-85 14:00")
                                                             (* If AC.CURRENT.WINDOW is a menu, then return the main
							     window. Otherwise, AC.CURRENT.WINDOW is the main 
							     window.)
    (COND
      ((WINDOWPROP AC.CURRENT.WINDOW (QUOTE MENU))
	(MAINWINDOW AC.CURRENT.WINDOW))
      (T AC.CURRENT.WINDOW))))

(AC.RESET.ACE.VARIABLES
  (LAMBDA NIL                                                (* SCB: "25-Sep-85 16:33")
    (SETQ ACE.CURRENT.SEQUENCE NIL)
    (SETQ ACE.SEQ.WIDTH NIL)
    (SETQ ACE.SEQ.HEIGHT NIL)
    (SETQ ACE.SEQ.WINDOW NIL)
    (SETQ ACE.FRAME.TAIL NIL)
    (SETQ ACE.CURRENT.FRAME NIL)
    (SETQ AC.STATUS.WINDOW NIL)
    (SETQ AC.CURRENT.FRAME.NUMBER NIL)
    (SETQ AC.RECORD NIL)
    (SETQ AC.SKETCH.SEQUENCE NIL)
    (SETQ AC.STATUS.SEQUENCE NIL)
    (SETQ AC.CARD.ACTIVE NIL)
    (SETQ AC.SKETCH.BITMAP NIL)
    (SETQ AC.SKETCH.WINDOW NIL)
    (SETQ AC.SKETCH.FINISHED NIL)))

(AC.SAVE.STATE.TO.NOTECARD
  (LAMBDA (ID)                                               (* SCB: " 2-Oct-85 21:55")
    (NCP.CardProp ID (QUOTE ACE.SEQ.WIDTH)
		  ACE.SEQ.WIDTH)
    (NCP.CardProp ID (QUOTE ACE.SEQ.HEIGHT)
		  ACE.SEQ.HEIGHT)
    (AC.ANIMATION.CARD.MARK.CARD.DIRTY.FN ID T)))

(AC.RESTORE.STATE.FROM.NOTECARD
  (LAMBDA (ID)                                               (* SCB: " 2-Oct-85 21:55")
    (SETQ AC.RECORD (NC.FetchSubstance ID))
    (SETQ ACE.CURRENT.SEQUENCE (fetch BITMAP.SEQUENCE of AC.RECORD))
    (SETQ AC.SKETCH.SEQUENCE (fetch SKETCH.SEQUENCE of AC.RECORD))
    (SETQ AC.STATUS.SEQUENCE (fetch STATUS.SEQUENCE of AC.RECORD))
    (SETQ ACE.SEQ.WIDTH (NCP.CardProp ID (QUOTE ACE.SEQ.WIDTH)))
    (SETQ ACE.SEQ.HEIGHT (NCP.CardProp ID (QUOTE ACE.SEQ.HEIGHT)))))

(AC.FIX.MAIN.MENU
  (LAMBDA (WINDOW)                                           (* SCB: "30-Sep-85 23:02")
    (PROG (MENUW)
          (COND
	    ((SETQ MENUW (WINDOWPROP WINDOW (QUOTE ATTACHED.MENUW))))
	    (T (SETQ MENUW (MENUWINDOW AC.MAIN.MENU.FIXED NIL))))
          (COND
	    ((NOT (MEMBER MENUW (ALLATTACHEDWINDOWS WINDOW)))
	      (ATTACHWINDOW MENUW WINDOW (QUOTE RIGHT)
			    (QUOTE TOP)
			    (QUOTE LOCALCLOSE))))
          (OPENW MENUW)
          (WINDOWPROP WINDOW (QUOTE ATTACHED.MENUW)
		      MENUW)
          (WINDOWADDPROP MENUW (QUOTE CLOSEFN)
			 (FUNCTION DETACHWINDOW)))))

(AC.INITIALIZE.STATUS.WINDOW
  (LAMBDA (MAIN.WINDOW)                                      (* SCB: "21-Oct-85 14:11")
    (LET ((STATUS.WINDOW (CREATEW (CREATEREGION 0 0 90 20)
				  NIL NIL NIL)))
      (SETQ AC.STATUS.WINDOW STATUS.WINDOW)
      (ATTACHWINDOW STATUS.WINDOW MAIN.WINDOW (QUOTE TOP)
		    (QUOTE LEFT))
      (WINDOWPROP STATUS.WINDOW (QUOTE RIGHTBUTTONFN)
		  (FUNCTION NILL)))))

(AC.UPDATE.STATUS.WINDOW
  (LAMBDA NIL                                                (* SCB: "21-Sep-85 14:27")
    (AC.DISPLAY.FRAME.NUMBER AC.CURRENT.FRAME.NUMBER)))

(AC.DISPLAY.FRAME.NUMBER
  (LAMBDA (N)                                                (* SCB: "18-Oct-85 14:51")
    (CLEARW AC.STATUS.WINDOW)
    (PRIN1 "Frame " AC.STATUS.WINDOW)
    (PRIN1 N AC.STATUS.WINDOW)
    (PRIN1 "/" AC.STATUS.WINDOW)
    (COND
      ((NULL ACE.CURRENT.SEQUENCE)
	(PRIN1 "1" AC.STATUS.WINDOW))
      (T (PRIN1 (LENGTH ACE.CURRENT.SEQUENCE)
		AC.STATUS.WINDOW)))))

(AC.MOVE.TO.NEXT.FRAME
  (LAMBDA NIL                                                (* SCB: "21-Sep-85 14:40")
    (PROG (CURRENT.FRAME)
          (COND
	    ((NULL (AND (AC.CHECK (QUOTE ACE.CURRENT.SEQUENCE))
			(AC.CHECK (QUOTE ACE.FRAME.TAIL))))
	      NIL)
	    (T (SETQ AC.CURRENT.FRAME.NUMBER (ADD1 AC.CURRENT.FRAME.NUMBER))
	       (AC.UPDATE.STATUS.WINDOW)
	       (SETQ CURRENT.FRAME (CAR ACE.FRAME.TAIL))
	       (SETQ ACE.CURRENT.FRAME ACE.FRAME.TAIL)
	       (SETQ ACE.FRAME.TAIL (CDR ACE.FRAME.TAIL))
	       (COND
		 ((NULL (fetch (ACE.FRAME BLITS) of CURRENT.FRAME))
		   NIL)
		 (T (ACE.MAC.SEQ.CLIP (for FRAME.PART in (fetch (ACE.FRAME BLITS) of CURRENT.FRAME)
					 do (BITBLT (fetch (ACE.BLIT BITMAP) of FRAME.PART)
						    NIL NIL ACE.SEQ.WINDOW
						    (IPLUS ACE.SEQ.WINDOW.XOFF (fetch (ACE.BLIT
											XCOOR)
										  of FRAME.PART))
						    (IPLUS ACE.SEQ.WINDOW.YOFF (fetch (ACE.BLIT
											YCOOR)
										  of FRAME.PART))
						    NIL NIL (QUOTE INPUT)
						    (QUOTE REPLACE)))))))))))

(AC.MOVE.TO.PREVIOUS.FRAME
  (LAMBDA NIL                                                (* SCB: "21-Sep-85 15:09")
    (AND (AC.CHECK (QUOTE ACE.CURRENT.SEQUENCE))
	 (AC.CHECK (QUOTE ACE.CURRENT.FRAME))
	 (LET ((DIFF (LDIFF ACE.CURRENT.SEQUENCE ACE.CURRENT.FRAME)))
	   (COND
	     (DIFF (SETQ AC.CURRENT.FRAME.NUMBER (SUB1 AC.CURRENT.FRAME.NUMBER))
		   (AC.UPDATE.STATUS.WINDOW)))
	   (ACE.QUICKDRAW&UPD DIFF)))))

(AC.GOTO.FRAME.N
  (LAMBDA NIL                                                (* SCB: "21-Sep-85 15:39")
    (PROG (N)
          (SETQ N (AC.PROMPT "Move to which frame? "))
          (COND
	    ((AND (FIXP N)
		  (IGEQ N 1)
		  (ILEQ N (LENGTH ACE.CURRENT.SEQUENCE)))
	      (SETQ AC.CURRENT.FRAME.NUMBER N)
	      (AC.UPDATE.STATUS.WINDOW)
	      (ACE.QUICKDRAW&UPD (LDIFF ACE.CURRENT.SEQUENCE (CDR (NTH ACE.CURRENT.SEQUENCE N)))))))))

(AC.DELETE.CURRENT.FRAME
  (LAMBDA (ID)                                               (* SCB: "19-Oct-85 12:20")
    (PROG (BEFORE.BM AFTER.BM)
          (COND
	    ((NULL (AND (AC.CHECK (QUOTE ACE.CURRENT.SEQUENCE))
			(AC.CHECK (QUOTE ACE.CURRENT.FRAME))))
	      NIL)
	    ((NULL (CDR ACE.CURRENT.SEQUENCE))
	      (AC.PRINT.MSG "Can't DELETE only frame.  Aborted." T))
	    ((NULL (AC.CONFIRM "Click LEFT to Confirm Delete"))
	      NIL)
	    ((EQ ACE.CURRENT.SEQUENCE ACE.CURRENT.FRAME)     (* Delete the first frame.)
	      (SETQ AFTER.BM (ACE.RECONSTRUCT.FRAME (LDIFF ACE.CURRENT.SEQUENCE (CDR ACE.FRAME.TAIL)))
		)
	      (replace (ACE.FRAME BLITS) of (CAR ACE.FRAME.TAIL)
		 with (LIST (create ACE.BLIT
				    BITMAP ← AFTER.BM
				    XCOOR ← 0
				    YCOOR ← 0)))
	      (RPLACA ACE.CURRENT.FRAME (CAR ACE.FRAME.TAIL))
	      (RPLACD ACE.CURRENT.FRAME (CDR ACE.FRAME.TAIL))
	      (RPLACA AC.SKETCH.SEQUENCE (CADR AC.SKETCH.SEQUENCE))
	      (RPLACD AC.SKETCH.SEQUENCE (CDDR AC.SKETCH.SEQUENCE))
	      (RPLACA AC.STATUS.SEQUENCE (CADR AC.STATUS.SEQUENCE))
	      (RPLACD AC.STATUS.SEQUENCE (CDDR AC.STATUS.SEQUENCE))
	      (AC.UPDATE.STATUS.WINDOW)
	      (PUTPROP ID (QUOTE EDITED)
		       T)
	      (ACE.QUICKDRAW&UPD (LDIFF ACE.CURRENT.SEQUENCE (CDR ACE.CURRENT.FRAME))))
	    ((NULL ACE.FRAME.TAIL)
	      (SETQ AC.CURRENT.FRAME.NUMBER (SUB1 AC.CURRENT.FRAME.NUMBER))
	      (BUTLAST! ACE.CURRENT.SEQUENCE)
	      (BUTLAST! AC.SKETCH.SEQUENCE)
	      (BUTLAST! AC.STATUS.SEQUENCE)
	      (AC.UPDATE.STATUS.WINDOW)
	      (PUTPROP ID (QUOTE EDITED)
		       T)
	      (ACE.QUICKDRAW&UPD ACE.CURRENT.SEQUENCE))
	    (T (SETQ BEFORE.BM (ACE.RECONSTRUCT.FRAME (LDIFF ACE.CURRENT.SEQUENCE ACE.CURRENT.FRAME)))
	       (SETQ AFTER.BM (ACE.RECONSTRUCT.FRAME (LDIFF ACE.CURRENT.SEQUENCE (CDR ACE.FRAME.TAIL))
						     ))
	       (replace (ACE.FRAME BLITS) of (CAR ACE.CURRENT.FRAME)
		  with (ACE.COMPILE.FRAME BEFORE.BM AFTER.BM ACE.VERTICAL.BLOCK ACE.AREA.THRESHOLD))
	       (RPLACD ACE.CURRENT.FRAME (CDR ACE.FRAME.TAIL))
	       (RPLACD AC.SKETCH.SEQUENCE (CDDR AC.SKETCH.SEQUENCE))
	       (RPLACD AC.STATUS.SEQUENCE (CDDR AC.STATUS.SEQUENCE))
	       (AC.UPDATE.STATUS.WINDOW)
	       (PUTPROP ID (QUOTE EDITED)
			T)
	       (ACE.QUICKDRAW&UPD (LDIFF ACE.CURRENT.SEQUENCE (CDR ACE.CURRENT.FRAME))))))))

(BUTLAST!
  (LAMBDA (LIST)                                             (* SCB: " 2-Oct-85 15:07")
    (for TAIL on LIST until (NULL (CDDR TAIL)) do T
       finally (RPLACD TAIL NIL)
	       (RETURN LIST))))

(AC.INSERT.NEW.FRAME
  (LAMBDA (ID)                                               (* SCB: "11-Oct-85 13:20")
    (COND
      ((NULL (AND (AC.CHECK (QUOTE ACE.CURRENT.SEQUENCE))
		  (OR (AC.CHECK (QUOTE ACE.CURRENT.FRAME))
		      (AC.PRINT.MSG "Can't put a frame before the First Frame."))))
	NIL)
      (T (RPLACD ACE.CURRENT.FRAME (CONS (create ACE.FRAME
						 DELAY ← AC.DEFAULT.DELAY
						 BLITS ← NIL)
					 (CDR ACE.CURRENT.FRAME)))
	 (LET ((TAIL (NTH AC.SKETCH.SEQUENCE AC.CURRENT.FRAME.NUMBER)))
                                                             (* Insert a copy of the imageobj.)
	   (RPLACD TAIL (CONS (HCOPYALL (CAR TAIL))
			      (CDR TAIL))))
	 (LET ((TAIL (NTH AC.STATUS.SEQUENCE AC.CURRENT.FRAME.NUMBER)))
	   (RPLACD TAIL (CONS (CAR TAIL)
			      (CDR TAIL))))
	 (SETQ AC.CURRENT.FRAME.NUMBER (ADD1 AC.CURRENT.FRAME.NUMBER))
	 (AC.UPDATE.STATUS.WINDOW)
	 (SETQ ACE.CURRENT.FRAME (CDR ACE.CURRENT.FRAME))
	 (SETQ ACE.FRAME.TAIL (CDR ACE.CURRENT.FRAME))
	 (PUTPROP ID (QUOTE EDITED)
		  T)))))

(AC.INSERT.COPY.OF.ANOTHER.FRAME
  (LAMBDA (ID)                                               (* SCB: "11-Oct-85 13:26")
    (COND
      ((NULL (AND (AC.CHECK (QUOTE ACE.CURRENT.SEQUENCE))
		  (OR (AC.CHECK (QUOTE ACE.CURRENT.FRAME))
		      (AC.PRINT.MSG "Can't put a frame before the First Frame."))))
	NIL)
      (T (PROG (FRAME.NUMBER BITMAP)
	       (SETQ FRAME.NUMBER (AC.PROMPT "Number of frame to insert after current frame = "))
	       (COND
		 ((OR (NOT (FIXP FRAME.NUMBER))
		      (ILESSP FRAME.NUMBER 1)
		      (IGREATERP FRAME.NUMBER (LENGTH ACE.CURRENT.SEQUENCE)))
		   (RETURN NIL)))
	       (COND
		 ((EQ ACE.CURRENT.FRAME ACE.CURRENT.SEQUENCE)
		   (SETQ BITMAP (HCOPYALL (fetch (ACE.BLIT BITMAP) OF (CAR (FETCH (ACE.FRAME BLITS)
									      OF (CAR 
									     ACE.CURRENT.SEQUENCE)))))
		     ))
		 (T (SETQ BITMAP (ACE.RECONSTRUCT.FRAME (LDIFF ACE.CURRENT.SEQUENCE
							       (CDR (NTH ACE.CURRENT.SEQUENCE 
									 FRAME.NUMBER)))))))
                                                             (* Insert dummy frame.)
	       (RPLACD ACE.CURRENT.FRAME (CONS (create ACE.FRAME
						       DELAY ← AC.DEFAULT.DELAY
						       BLITS ← NIL)
					       (CDR ACE.CURRENT.FRAME)))
                                                             (* Recompile the bitmap into the surrounding bitmaps.)
	       (SETQ ACE.CURRENT.FRAME (CDR ACE.CURRENT.FRAME))
	       (SETQ ACE.FRAME.TAIL (CDR ACE.CURRENT.FRAME))
	       (AC.COMPILE.FRAME BITMAP)
	       (LET ((TAIL (NTH AC.SKETCH.SEQUENCE AC.CURRENT.FRAME.NUMBER)))
                                                             (* Insert a copy of the imageobj.)
		 (RPLACD TAIL (CONS (HCOPYALL (CAR (NTH AC.SKETCH.SEQUENCE FRAME.NUMBER)))
				    (CDR TAIL))))
	       (LET ((TAIL (NTH AC.STATUS.SEQUENCE AC.CURRENT.FRAME.NUMBER)))
		 (RPLACD TAIL (CONS (CAR TAIL)
				    (CDR TAIL))))
	       (SETQ AC.CURRENT.FRAME.NUMBER (ADD1 AC.CURRENT.FRAME.NUMBER))
	       (AC.UPDATE.STATUS.WINDOW)
	       (SETQ ACE.FRAME.TAIL (CDR ACE.CURRENT.FRAME))
	       (PUTPROP ID (QUOTE EDITED)
			T))))))

(AC.COMPILE.FRAME
  (LAMBDA (BITMAP)                                           (* SCB: "18-Oct-85 12:02")
    (PROG (BEFORE.BM PRESENT.BM AFTER.BM)
          (COND
	    ((NULL (AND (AC.CHECK (QUOTE ACE.CURRENT.SEQUENCE))
			(AC.CHECK (QUOTE ACE.CURRENT.FRAME))))
	      NIL)
	    (T (COND
		 ((EQ ACE.CURRENT.FRAME ACE.CURRENT.SEQUENCE)
		   (SETQ BEFORE.BM NIL))
		 (T (SETQ BEFORE.BM (ACE.RECONSTRUCT.FRAME (LDIFF ACE.CURRENT.SEQUENCE 
								  ACE.CURRENT.FRAME)))))
	       (COND
		 ((NULL ACE.FRAME.TAIL)
		   (SETQ AFTER.BM NIL))
		 (T (SETQ AFTER.BM (ACE.RECONSTRUCT.FRAME (LDIFF ACE.CURRENT.SEQUENCE (CDR 
										   ACE.FRAME.TAIL)))))
		 )
	       (SETQ PRESENT.BM BITMAP)
	       (COND
		 ((NULL (OR BEFORE.BM AFTER.BM))
		   (replace (ACE.FRAME BLITS) of (CAR ACE.CURRENT.FRAME)
		      with (LIST (create ACE.BLIT
					 BITMAP ← PRESENT.BM
					 XCOOR ← 0
					 YCOOR ← 0))))
		 ((NULL BEFORE.BM)
		   (replace (ACE.FRAME BLITS) of (CAR ACE.CURRENT.FRAME)
		      with (LIST (create ACE.BLIT
					 BITMAP ← PRESENT.BM
					 XCOOR ← 0
					 YCOOR ← 0)))
		   (replace (ACE.FRAME BLITS) of (CAR ACE.FRAME.TAIL)
		      with (ACE.COMPILE.FRAME.ACE PRESENT.BM AFTER.BM ACE.VERTICAL.BLOCK 
						  ACE.AREA.THRESHOLD)))
		 ((NULL AFTER.BM)
		   (replace (ACE.FRAME BLITS) of (CAR ACE.CURRENT.FRAME)
		      with (ACE.COMPILE.FRAME.ACE BEFORE.BM PRESENT.BM ACE.VERTICAL.BLOCK 
						  ACE.AREA.THRESHOLD)))
		 (T (replace (ACE.FRAME BLITS) of (CAR ACE.CURRENT.FRAME)
		       with (ACE.COMPILE.FRAME.ACE BEFORE.BM PRESENT.BM ACE.VERTICAL.BLOCK 
						   ACE.AREA.THRESHOLD))
		    (replace (ACE.FRAME BLITS) of (CAR ACE.FRAME.TAIL)
		       with (ACE.COMPILE.FRAME.ACE PRESENT.BM AFTER.BM ACE.VERTICAL.BLOCK 
						   ACE.AREA.THRESHOLD))))
	       (ACE.QUICKDRAW&UPD (LDIFF ACE.CURRENT.SEQUENCE ACE.FRAME.TAIL))
	       (PUTPROP ID (QUOTE EDITED)
			T))))))

(AC.INITIALIZE.SEQUENCE
  (LAMBDA (ID)                                               (* SCB: " 1-Oct-85 16:28")
    (PROG (REGION)
          (SETQ REGION NIL)
          (COND
	    ((OR (NULL ACE.CURRENT.SEQUENCE)
		 (AC.PRINT.MSG "Creating a NEW Sequence will ERASE")
		 (AC.PRINT.MSG "the Current Animation Sequence." (QUOTE L))
		 (AC.CONFIRM "Click LEFT to Create NEW Sequence."))
	      (AC.PRINT.MSG "Specify SIZE of the NEW Sequence.")
	      (SETQ REGION (AC.DEFINE.SEQUENCE.WINDOW.REGION T))
	      (SHAPEW ACE.SEQ.WINDOW REGION)
	      (COND
		(AC.REMEMBER.REGION (NCP.CardProp ID (QUOTE CARD.ORIGINAL.REGION)
						  REGION))
		(T (NCP.CardProp ID (QUOTE CARD.ORIGINAL.POSITION)
				 NIL)))
	      (SETQ ACE.SEQ.WIDTH (fetch (REGION WIDTH) of REGION))
	      (SETQ ACE.SEQ.HEIGHT (fetch (REGION HEIGHT) of REGION))
	      (SETQ ACE.CURRENT.SEQUENCE (LIST (create ACE.FRAME
						       DELAY ← AC.DEFAULT.DELAY
						       BLITS ←(LIST (create ACE.BLIT
									    BITMAP ←(BITMAPCREATE
									      ACE.SEQ.WIDTH 
									      ACE.SEQ.HEIGHT 1)
									    XCOOR ← 0
									    YCOOR ← 0)))))
	      (SETQ AC.SKETCH.SEQUENCE (LIST NIL))
	      (SETQ AC.STATUS.SEQUENCE (LIST NIL))
	      (SETQ AC.RECORD (create FILM
				      BITMAP.SEQUENCE ← ACE.CURRENT.SEQUENCE
				      SKETCH.SEQUENCE ← AC.SKETCH.SEQUENCE
				      STATUS.SEQUENCE ← AC.STATUS.SEQUENCE))
	      (AC.ANIMATION.CARD.MARK.CARD.DIRTY.FN ID T)
	      (AC.SAVE.STATE.TO.NOTECARD ID)
	      (ACE.QUICKDRAW&UPD (LIST (CAR ACE.CURRENT.SEQUENCE)))
	      (SETQ AC.CURRENT.FRAME.NUMBER 1)
	      (AC.UPDATE.STATUS.WINDOW))))))

(AC.INITIALIZE.EDIT.FRAME.MENU
  (LAMBDA NIL                                                (* SCB: "24-Oct-85 09:47")
    (SETQ AC.EDIT.FRAME.MENU (create MENU
				     ITEMS ←(QUOTE (("Fill Area" AREAFILL 
								"Blacken/Whiten a closed region."
								 (SUBITEMS ("Fill Area" AREAFILL 
								"Blacken/Whiten a closed region.")
									   ("Set the fill value."
									     SET.FILL.VALUE 
						  "Set the value used to fill the closed region.")))
						     ("Texture Area" TEXTURE.AREA 
							    "Apply a texture to a closed region."
								     (SUBITEMS ("Delete texture"
										 DELETE.TEXTURE 
						       "Deletes a texture from the texture menu.")))
						     ("Invert Region" INVERT.REGION 
						"Replace black with white, and white with black.")
						     ("Clear Region" CLEAR.REGION 
								     "Black out a region.")
						     ("Set Region" SET.REGION "White out a region.")
						     ("Copy Region" COPY.REGION 
						    "Copy a region from one position to another.")
						     ("Move Region" MOVE.REGION 
						    "Move a region from one position to another.")
						     ("Edit Frame with Paint" EDIT.FRAME.WITH.PAINT 
					    "Use the PAINT utility to draw on the current frame.")
						     ("Edit Frame as Bitmap" EDIT.FRAME.AS.BITMAP 
					       "Use the BITMAP editor to edit the current frame.")
						     ("Edit Frame as Sketch" EDIT.FRAME.AS.SKETCH 
						    "Edit the sketch associated with this frame.")
						     ("Undo" UNDO "Undo the last bitmap operation.")
						     ("Abort" ABORT 
			    "Forget all the changes to the bitmap, and return to sequence level.")
						     ("Done" DONE 
					   "Return changes in this bitmap to the sequence level.")))
				     WHENSELECTEDFN ←(QUOTE AC.EDIT.FRAME.MENU.WHENSELECTEDFN)
				     TITLE ← "Edit Operation"
				     CENTERFLG ← T
				     MENUCOLUMNS ← 1))))

(AC.EDIT.FRAME.MENU.WHENSELECTEDFN
  (LAMBDA (ITEM MENU MOUSE.KEY)                              (* SCB: "24-Oct-85 09:47")
    (PROG (WINDOW ID PROCESS MESSAGE)
          (SETQ WINDOW (AC.ACTIVE.WINDOW))
          (SETQ ID (NCP.CardFromWindow WINDOW))
          (SETQ PROCESS (WINDOWPROP WINDOW (QUOTE PROCESS)))
          (COND
	    ((NULL (AND ID WINDOW PROCESS))
	      (ERROR "FOO" "BAR")))
          (SETQ MESSAGE (SELECTQ (CADR ITEM)
				 (AREAFILL (BQUOTE (AC.EDIT.FRAME.DISPATCH (QUOTE , ID)
									   (QUOTE , WINDOW)
									   (QUOTE AREAFILL))))
				 (SET.FILL.VALUE (QUOTE (AC.SET.FILL.OPTION)))
				 (SET.BOUNDARY.VALUE (QUOTE (AC.SET.BOUNDARY.OPTION)))
				 (TEXTURE.AREA (BQUOTE (AC.EDIT.FRAME.DISPATCH (QUOTE , ID)
									       (QUOTE , WINDOW)
									       (QUOTE TEXTURE.AREA))))
				 (DELETE.TEXTURE (QUOTE (AC.TEXTURE.MENU.DELETE.ITEM)))
				 (INVERT.REGION (BQUOTE (AC.EDIT.FRAME.DISPATCH (QUOTE , ID)
										(QUOTE , WINDOW)
										(QUOTE INVERT.REGION))
							))
				 (CLEAR.REGION (BQUOTE (AC.EDIT.FRAME.DISPATCH (QUOTE , ID)
									       (QUOTE , WINDOW)
									       (QUOTE CLEAR.REGION))))
				 (SET.REGION (BQUOTE (AC.EDIT.FRAME.DISPATCH (QUOTE , ID)
									     (QUOTE , WINDOW)
									     (QUOTE SET.REGION))))
				 (COPY.REGION (BQUOTE (AC.EDIT.FRAME.DISPATCH (QUOTE , ID)
									      (QUOTE , WINDOW)
									      (QUOTE COPY.REGION))))
				 (MOVE.REGION (BQUOTE (AC.EDIT.FRAME.DISPATCH (QUOTE , ID)
									      (QUOTE , WINDOW)
									      (QUOTE MOVE.REGION))))
				 (EDIT.FRAME.WITH.PAINT (BQUOTE (AC.EDIT.FRAME.DISPATCH (QUOTE , ID)
											(QUOTE , 
											   WINDOW)
											(QUOTE PAINT))
								))
				 (EDIT.FRAME.AS.BITMAP (BQUOTE (AC.EDIT.FRAME.DISPATCH (QUOTE , ID)
										       (QUOTE , 
											   WINDOW)
										       (QUOTE BITMAP))
							       ))
				 (EDIT.FRAME.AS.SKETCH (BQUOTE (AC.EDIT.FRAME.DISPATCH (QUOTE , ID)
										       (QUOTE , 
											   WINDOW)
										       (QUOTE SKETCH))
							       ))
				 (UNDO (BQUOTE (AC.EDIT.FRAME.UNDO (QUOTE , WINDOW))))
				 (ABORT (BQUOTE (AC.EDIT.FRAME.ABORT (QUOTE , WINDOW))))
				 (DONE (BQUOTE (AC.EDIT.FRAME.DONE (QUOTE , WINDOW))))
				 (ERROR "UNDEFINED OPERATION IN AC.EDIT.FRAME.MENU" ITEM)))
          (AC.TELL.PROCESS* PROCESS MESSAGE))))

(AC.EDIT.FRAME2
  (LAMBDA (ID WINDOW)                                        (* SCB: "23-Oct-85 21:41")
    (PROG (BITMAP)
          (LET ((W (WINDOWPROP WINDOW (QUOTE ATTACHED.MENUW))))
	    (DETACHWINDOW W)
	    (CLOSEW W))
          (LET ((MENUW (MENUWINDOW AC.EDIT.FRAME.MENU NIL)))
	    (WINDOWPROP WINDOW (QUOTE ATTACHED.EDIT.FRAME.MENUW)
			MENUW)
	    (ATTACHWINDOW MENUW WINDOW (QUOTE RIGHT)
			  (QUOTE TOP))
	    (WINDOWPROP MENUW (QUOTE RIGHTBUTTONFN)
			(FUNCTION NILL))
	    (OPENW MENUW))
          (AC.DEESTABLISH.MENUS WINDOW)
          (COND
	    ((EQ ACE.CURRENT.FRAME ACE.CURRENT.SEQUENCE)
	      (SETQ BITMAP (HCOPYALL (fetch (ACE.BLIT BITMAP) of (CAR (fetch (ACE.FRAME BLITS)
									 of (CAR ACE.CURRENT.SEQUENCE)
									     ))))))
	    (T (SETQ BITMAP (ACE.RECONSTRUCT.FRAME (LDIFF ACE.CURRENT.SEQUENCE
							  (CDR (NTH ACE.CURRENT.SEQUENCE 
								    AC.CURRENT.FRAME.NUMBER)))))))
          (WINDOWPROP WINDOW (QUOTE BITMAP)
		      BITMAP)
          (LET ((PREVIOUS.BITMAP (BITMAPCOPY BITMAP)))
	    (WINDOWPROP WINDOW (QUOTE PREVIOUS.BITMAP)
			PREVIOUS.BITMAP)))))

(AC.EDIT.FRAME.DISPATCH
  (LAMBDA (ID WINDOW EDITMODE)                               (* SCB: "23-Oct-85 21:58")
    (PROG (BITMAP RESULT.BITMAP)
          (SETQ BITMAP (WINDOWPROP WINDOW (QUOTE BITMAP)))
          (BITBLT BITMAP 0 0 (WINDOWPROP WINDOW (QUOTE PREVIOUS.BITMAP))
		  0 0 NIL NIL (QUOTE INPUT)
		  (QUOTE REPLACE))
          (SETQ RESULT.BITMAP (SELECTQ EDITMODE
				       (SKETCH (AC.EDIT.FRAME.AS.SKETCH ID WINDOW BITMAP))
				       (BITMAP (AC.EDIT.FRAME.AS.BITMAP BITMAP))
				       (PAINT (AC.EDIT.FRAME.WITH.PAINT BITMAP))
				       (INVERT.REGION (AC.EDIT.FRAME.INVERT.REGION WINDOW BITMAP))
				       (CLEAR.REGION (AC.EDIT.FRAME.CLEAR.REGION WINDOW BITMAP))
				       (SET.REGION (AC.EDIT.FRAME.SET.REGION WINDOW BITMAP))
				       (COPY.REGION (AC.EDIT.FRAME.COPY.REGION WINDOW BITMAP))
				       (MOVE.REGION (AC.EDIT.FRAME.MOVE.REGION WINDOW BITMAP))
				       (AREAFILL (AC.AREAFILL WINDOW BITMAP))
				       (TEXTURE.AREA (AC.TEXTURE.AREA WINDOW BITMAP))
				       (PROGN NIL)))
          (COND
	    ((BITMAPP RESULT.BITMAP)
	      (WINDOWPROP WINDOW (QUOTE BITMAP)
			  RESULT.BITMAP)
	      (WINDOWPROP WINDOW (QUOTE UNDO.FLAG)
			  T)
	      (BITBLT RESULT.BITMAP 0 0 ACE.SEQ.WINDOW 0 0 NIL NIL))))))

(AC.EDIT.FRAME.UNDO
  (LAMBDA (WINDOW)                                           (* SCB: "23-Oct-85 21:39")
    (LET ((PREVIOUS.BITMAP (WINDOWPROP WINDOW (QUOTE PREVIOUS.BITMAP))))
      (COND
	((NULL (WINDOWPROP WINDOW (QUOTE UNDO.FLAG)))
	  (AC.PRINT.MSG "Sorry, can't undo."))
	(T (BITBLT PREVIOUS.BITMAP 0 0 ACE.SEQ.WINDOW 0 0 NIL NIL (QUOTE INPUT)
		   (QUOTE REPLACE))
	   (BITBLT PREVIOUS.BITMAP 0 0 (WINDOWPROP WINDOW (QUOTE BITMAP))
		   0 0 NIL NIL (QUOTE INPUT)
		   (QUOTE REPLACE))
	   (WINDOWPROP WINDOW (QUOTE UNDO.FLAG)
		       NIL))))))

(AC.EDIT.FRAME.DONE
  (LAMBDA (WINDOW)                                           (* SCB: "23-Oct-85 21:34")
    (LET ((W (WINDOWPROP WINDOW (QUOTE ATTACHED.EDIT.FRAME.MENUW)
			 NIL)))
      (DETACHWINDOW W)
      (CLOSEW W))
    (LET ((ATTACHED.MENUW (WINDOWPROP WINDOW (QUOTE ATTACHED.MENUW))))
      (COND
	(ATTACHED.MENUW (ATTACHWINDOW ATTACHED.MENUW WINDOW (QUOTE RIGHT)
				      (QUOTE TOP)
				      (QUOTE LOCALCLOSE))
			(OPENW ATTACHED.MENUW))))
    (AC.ESTABLISH.MENUS WINDOW)
    (LET ((BITMAP (WINDOWPROP WINDOW (QUOTE BITMAP))))
      (AND BITMAP (AC.COMPILE.FRAME BITMAP)))
    (WINDOWPROP WINDOW (QUOTE BITMAP)
		NIL)
    (WINDOWPROP WINDOW (QUOTE PREVIOUS.BITMAP)
		NIL)))

(AC.EDIT.FRAME.ABORT
  (LAMBDA (WINDOW)                                           (* SCB: "23-Oct-85 21:20")
    (PROG NIL
          (COND
	    ((NULL (AC.CONFIRM "Click LEFT to Confirm Abort"))
	      (RETURN NIL)))
          (WINDOWPROP WINDOW (QUOTE BITMAP)
		      NIL)                                   (* FLUSH THE BITMAP.)
          (ACE.QUICKDRAW&UPD (LDIFF ACE.CURRENT.SEQUENCE (CDR ACE.CURRENT.FRAME)))
          (AC.EDIT.FRAME.DONE WINDOW))))

(AC.EDIT.FRAME.WITH.PAINT
  (LAMBDA (BITMAP)                                           (* SCB: "18-Oct-85 12:26")
    (BITBLT BITMAP 0 0 ACE.SEQ.WINDOW ACE.SEQ.WINDOW.XOFF ACE.SEQ.WINDOW.YOFF NIL NIL (QUOTE INPUT)
	    (QUOTE REPLACE)
	    NIL NIL)
    (PAINTW ACE.SEQ.WINDOW)
    (BITBLT ACE.SEQ.WINDOW 0 0 BITMAP 0 0 NIL NIL (QUOTE INPUT)
	    (QUOTE REPLACE))
    (AC.SET.STATUS.BIT T)
    BITMAP))

(AC.CONVERT.SCREEN.REGION.TO.WINDOW.REGION
  (LAMBDA (WINDOW REGION)                                    (* SCB: "23-Oct-85 20:42")
    (LET* ((BORDER (WINDOWPROP WINDOW (QUOTE BORDER)))
       (WINDOW.REGION (WINDOWPROP WINDOW (QUOTE REGION)))
       (WINDOW.X (IPLUS (fetch (REGION LEFT) of WINDOW.REGION)
			BORDER))
       (WINDOW.Y (IPLUS (fetch (REGION BOTTOM) of WINDOW.REGION)
			BORDER)))
      (CREATEREGION (IDIFFERENCE (fetch (REGION LEFT) of REGION)
				 WINDOW.X)
		    (IDIFFERENCE (fetch (REGION BOTTOM) of REGION)
				 WINDOW.Y)
		    (fetch (REGION WIDTH) of REGION)
		    (fetch (REGION HEIGHT) of REGION)))))

(AC.EDIT.FRAME.CLEAR.REGION
  (LAMBDA (WINDOW BITMAP)                                    (* SCB: "23-Oct-85 14:06")
    (LET ((REGION (AC.CONVERT.SCREEN.REGION.TO.WINDOW.REGION WINDOW (GETREGION))))
      (BITBLT BITMAP 0 0 BITMAP 0 0 NIL NIL (QUOTE INPUT)
	      (QUOTE INVERT)
	      NIL REGION)
      BITMAP)))

(AC.EDIT.FRAME.INVERT.REGION
  (LAMBDA (WINDOW BITMAP)                                    (* SCB: "23-Oct-85 14:08")
    (LET ((REGION (AC.CONVERT.SCREEN.REGION.TO.WINDOW.REGION WINDOW (GETREGION))))
      (BITBLT BITMAP 0 0 BITMAP 0 0 NIL NIL (QUOTE INVERT)
	      (QUOTE REPLACE)
	      NIL REGION)
      BITMAP)))

(AC.EDIT.FRAME.SET.REGION
  (LAMBDA (WINDOW BITMAP)                                    (* SCB: "23-Oct-85 14:08")
    (LET ((REGION (AC.CONVERT.SCREEN.REGION.TO.WINDOW.REGION WINDOW (GETREGION))))
      (BITBLT BITMAP 0 0 BITMAP 0 0 NIL NIL (QUOTE INVERT)
	      (QUOTE PAINT)
	      NIL REGION)
      BITMAP)))

(AC.TRACK.MOUSE.WITH.BITMAP
  (LAMBDA (WINDOW BITMAP)                                    (* SCB: "23-Oct-85 15:56")
    (PROG (NEWX NEWY OLDX OLDY)
          (SETQ OLDX (LASTMOUSEX WINDOW))
          (SETQ OLDY (LASTMOUSEY WINDOW))
          (BITBLT BITMAP 0 0 WINDOW OLDX OLDY NIL NIL (QUOTE INPUT)
		  (QUOTE INVERT))
      LOOP(SETQ NEWX (LASTMOUSEX WINDOW))
          (SETQ NEWY (LASTMOUSEY WINDOW))
          (BITBLT BITMAP 0 0 WINDOW OLDX OLDY NIL NIL (QUOTE INPUT)
		  (QUOTE INVERT))
          (BITBLT BITMAP 0 0 WINDOW NEWX NEWY NIL NIL (QUOTE INPUT)
		  (QUOTE INVERT))
          (COND
	    ((MOUSESTATE (OR LEFT MIDDLE RIGHT))
	      (RETURN (create POSITION
			      XCOORD ← NEWX
			      YCOORD ← NEWY))))
          (SETQ OLDX NEWX)
          (SETQ OLDY NEWY)
          (GO LOOP))))

(AC.EDIT.FRAME.COPY.REGION
  (LAMBDA (WINDOW BITMAP)                                    (* SCB: "24-Oct-85 10:00")
    (PROG (OLD.REGION OLD.POSITION TRACK.BITMAP NEW.POSITION)
          (SETQ OLD.REGION (AC.CONVERT.SCREEN.REGION.TO.WINDOW.REGION WINDOW (GETREGION)))
          (SETQ OLD.POSITION (create POSITION
				     XCOORD ←(fetch (REGION LEFT) of OLD.REGION)
				     YCOORD ←(fetch (REGION BOTTOM) of OLD.REGION)))
          (SETQ TRACK.BITMAP (BITMAPCREATE (fetch (REGION WIDTH) of OLD.REGION)
					   (fetch (REGION HEIGHT) of OLD.REGION)
					   1))
          (BITBLT BITMAP (fetch (POSITION XCOORD) of OLD.POSITION)
		  (fetch (POSITION YCOORD) of OLD.POSITION)
		  TRACK.BITMAP 0 0 NIL NIL (QUOTE INPUT)
		  (QUOTE REPLACE))
          (CURSORPOSITION OLD.POSITION WINDOW)
          (SETQ NEW.POSITION (AC.TRACK.MOUSE.WITH.BITMAP WINDOW TRACK.BITMAP))
          (BITBLT TRACK.BITMAP 0 0 BITMAP (fetch (POSITION XCOORD) of NEW.POSITION)
		  (fetch (POSITION YCOORD) of NEW.POSITION)
		  NIL NIL (QUOTE INPUT)
		  (QUOTE PAINT))
          (RETURN BITMAP))))

(AC.EDIT.FRAME.MOVE.REGION
  (LAMBDA (WINDOW BITMAP)                                    (* SCB: "24-Oct-85 09:59")
    (PROG (OLD.REGION OLD.POSITION TRACK.BITMAP NEW.POSITION)
          (SETQ OLD.REGION (AC.CONVERT.SCREEN.REGION.TO.WINDOW.REGION WINDOW (GETREGION)))
          (SETQ OLD.POSITION (create POSITION
				     XCOORD ←(fetch (REGION LEFT) of OLD.REGION)
				     YCOORD ←(fetch (REGION BOTTOM) of OLD.REGION)))
          (SETQ TRACK.BITMAP (BITMAPCREATE (fetch (REGION WIDTH) of OLD.REGION)
					   (fetch (REGION HEIGHT) of OLD.REGION)
					   1))
          (BITBLT BITMAP (fetch (POSITION XCOORD) of OLD.POSITION)
		  (fetch (POSITION YCOORD) of OLD.POSITION)
		  TRACK.BITMAP 0 0 NIL NIL (QUOTE INPUT)
		  (QUOTE REPLACE))
          (CURSORPOSITION OLD.POSITION WINDOW)
          (SETQ NEW.POSITION (AC.TRACK.MOUSE.WITH.BITMAP WINDOW TRACK.BITMAP))
          (BITBLT TRACK.BITMAP 0 0 BITMAP (fetch (POSITION XCOORD) of OLD.POSITION)
		  (fetch (POSITION YCOORD) of OLD.POSITION)
		  NIL NIL (QUOTE INPUT)
		  (QUOTE INVERT))
          (BITBLT TRACK.BITMAP 0 0 BITMAP (fetch (POSITION XCOORD) of NEW.POSITION)
		  (fetch (POSITION YCOORD) of NEW.POSITION)
		  NIL NIL (QUOTE INPUT)
		  (QUOTE PAINT))
          (RETURN BITMAP))))

(AC.EDIT.FRAME.AS.BITMAP
  (LAMBDA (BITMAP)                                           (* SCB: " 7-Oct-85 14:36")
    (EDITBM BITMAP)
    (AC.SET.STATUS.BIT T)
    BITMAP))

(AC.EDIT.FRAME.AS.SKETCH
  (LAMBDA (ID WINDOW BITMAP CHANGED.BITMAP)                  (* SCB: "18-Oct-85 14:20")
    (PROG (REGION SKETCH.RECORD OBJ SKETCH SKETCHREGION SCALE NEWWINDOW ITEM)
          (SETQ REGION (WINDOWPROP WINDOW (QUOTE REGION)))
          (SETQ SKETCH.RECORD (CAR (NTH AC.SKETCH.SEQUENCE AC.CURRENT.FRAME.NUMBER)))
          (SETQ OBJ (COND
	      (SKETCH.RECORD (IMAGEOBJPROP SKETCH.RECORD (QUOTE OBJECTDATUM)))))
                                                             (* So much for data abstraction.)
          (SETQ SKETCH (CAR OBJ))
          (SETQ SKETCHREGION (CADR OBJ))
          (SETQ SCALE (CADDR OBJ))
          (SETQ NEWWINDOW (SKETCHW.CREATE SKETCH SKETCHREGION REGION (NC.FetchTitle ID)
					  SCALE T))
          (WINDOWPROP NEWWINDOW (QUOTE DONTQUERYCHANGES)
		      T)
          (WINDOWPROP NEWWINDOW (QUOTE OLDUSERPROCESS)
		      (WINDOWPROP WINDOW (QUOTE PROCESS)))
          (LET ((W (WINDOWPROP WINDOW (QUOTE ATTACHED.EDIT.FRAME.MENUW))))
	    (DETACHWINDOW W)
	    (CLOSEW W))
          (LET ((MENUW (MENUWINDOW AC.SKETCH.MENU NIL)))
	    (OPENW MENUW)
	    (ATTACHWINDOW MENUW NEWWINDOW (QUOTE TOP)
			  (QUOTE RIGHT)))
          (WINDOWPROP NEWWINDOW (QUOTE MOVEFN)
		      (FUNCTION AC.MOVE.SEQUENCE.WINDOW.BEHIND.SKETCH.WINDOW))
          (SETQ AC.SKETCH.WINDOW NEWWINDOW)
          (SETQ AC.SKETCH.BITMAP BITMAP)
          (TTY.PROCESS (WINDOWPROP AC.SKETCH.WINDOW (QUOTE PROCESS)))
          (SETQ ITEM (BLOCK T))
          (RPLACA (NTH AC.SKETCH.SEQUENCE AC.CURRENT.FRAME.NUMBER)
		  (SKETCHIMAGEOBJ.FROM.VIEWER AC.SKETCH.WINDOW))
          (SETQ CHANGED.BITMAP NIL)
          (COND
	    ((EQ (CADR ITEM)
		 (QUOTE DONE.UPDATE.BITMAP))
	      (AC.BITBLT.FROM.SKETCH.WINDOW AC.SKETCH.WINDOW AC.SKETCH.BITMAP)
	      (AC.SET.STATUS.BIT NIL)
	      (SETQ CHANGED.BITMAP BITMAP))
	    ((AND (EQ (CADR ITEM)
		      (QUOTE DONE))
		  (NULL (fetch BLITS of (CAR ACE.CURRENT.FRAME))))
                                                             (* If they didn't ask for a save, but there was no 
							     bitblt for this frame, make a bitmap anyway.)
	      (AC.BITBLT.FROM.SKETCH.WINDOW AC.SKETCH.WINDOW AC.SKETCH.BITMAP)
	      (AC.SET.STATUS.BIT NIL)
	      (SETQ CHANGED.BITMAP BITMAP)))
          (for VIEWER in (ALL.SKETCH.VIEWERS (WINDOWPROP AC.SKETCH.WINDOW (QUOTE SKETCH)))
	     do (REMOVE.SKETCH.VIEWER (WINDOWPROP VIEWER (QUOTE SKETCH)))
		(DEL.PROCESS (WINDOWPROP VIEWER (QUOTE PROCESS)
					 NIL))
		(CLOSEW VIEWER))
          (TOTOPW WINDOW)
          (TTY.PROCESS (WINDOWPROP WINDOW (QUOTE PROCESS)))
          (LET ((W (WINDOWPROP WINDOW (QUOTE ATTACHED.EDIT.FRAME.MENUW))))
	    (COND
	      (W (ATTACHWINDOW W WINDOW (QUOTE RIGHT)
			       (QUOTE TOP)
			       (QUOTE LOCALCLOSE))
		 (OPENW W))))
          (RETURN CHANGED.BITMAP))))

(AC.SKETCH.MENU.WHENSELECTEDFN
  (LAMBDA (ITEM MENU MOUSE.KEY)                              (* SCB: " 1-Oct-85 19:55")
    (WAKE.PROCESS (WINDOWPROP (AC.ACTIVE.WINDOW)
			      (QUOTE OLDUSERPROCESS))
		  ITEM)                                      (* This NIL keeps NC.TitleBarButtonEventFn happy.)
    NIL))

(AC.INITIALIZE.SKETCH.MENU
  (LAMBDA NIL                                                (* SCB: "15-Oct-85 17:09")
    (SETQ AC.SKETCH.MENU (create MENU
				 ITEMS ←(QUOTE (("Done" DONE 
						       "Exit SKETCH, but leave the bitmap alone.")
						 ("Done, Update Bitmap" DONE.UPDATE.BITMAP 
      "Exit SKETCH, and copy the contents of the sketch into the bitmap (destroying old bitmap).")))
				 WHENSELECTEDFN ←(QUOTE AC.SKETCH.MENU.WHENSELECTEDFN)
				 CENTERFLG ← T
				 MENUCOLUMNS ← 1))))

(AC.BITBLT.FROM.SKETCH.WINDOW
  (LAMBDA (SKETCH.WINDOW SKETCH.BITMAP)                      (* SCB: " 7-Oct-85 14:10")
    (SK.UPDATE.AFTER.SCALE.CHANGE SKETCH.WINDOW)
    (LET ((CLIPPING.REGION (DSPCLIPPINGREGION NIL SKETCH.WINDOW)))
      (BITBLT SKETCH.WINDOW (CAR CLIPPING.REGION)
	      (CADR CLIPPING.REGION)
	      SKETCH.BITMAP 0 0))))

(AC.GET.STATUS.BIT
  (LAMBDA NIL                                                (* SCB: " 7-Oct-85 14:20")
    (CAR (NTH AC.STATUS.SEQUENCE AC.CURRENT.FRAME.NUMBER))))

(AC.SET.STATUS.BIT
  (LAMBDA (BIT)                                              (* SCB: " 7-Oct-85 14:35")
    (COND
      ((CAR (NTH AC.SKETCH.SEQUENCE AC.CURRENT.FRAME.NUMBER))
	(RPLACA (NTH AC.STATUS.SEQUENCE AC.CURRENT.FRAME.NUMBER)
		BIT)))))

(AC.MOVE.SEQUENCE.WINDOW.BEHIND.SKETCH.WINDOW
  (LAMBDA (WINDOW NEWPOS)                                    (* SCB: " 1-Oct-85 23:20")
    (MOVEW (PROCESS.EVALV (WINDOWPROP WINDOW (QUOTE OLDUSERPROCESS))
			  (QUOTE ACE.SEQ.WINDOW))
	   NEWPOS)
    (MOVEATTACHEDWINDOWS WINDOW NEWPOS)
    T))

(AC.AREAFILL
  (LAMBDA (WINDOW BITMAP)                                    (* SCB: "21-Oct-85 12:39")
    (AC.PRINT.MSG "Click the mouse inside the region to be filled.")
    (RESETLST (RESETSAVE (CURSOR POINTREADINGCURSOR))
	      (UNTILMOUSESTATE (OR LEFT MIDDLE RIGHT)))
    (COND
      ((INSIDEP (WINDOWPROP WINDOW (QUOTE REGION))
		LASTMOUSEX LASTMOUSEY)
	(RESETLST (RESETSAVE (CURSOR WAITINGCURSOR))
		  (SCANLINESEEDFILL WINDOW (LASTMOUSEX WINDOW)
				    (LASTMOUSEY WINDOW)
				    AC.BOUNDARY.VALUE AC.FILL.VALUE)
		  (BITBLT WINDOW 0 0 BITMAP 0 0 NIL NIL (QUOTE INPUT)
			  (QUOTE REPLACE)))
	(AC.SET.STATUS.BIT T)
	BITMAP))))

(AC.TEXTURE.AREA
  (LAMBDA (WINDOW BITMAP)                                    (* SCB: "21-Oct-85 12:42")
    (PROG (TEXTURE)
          (SETQ TEXTURE (READ.FILLING.CHANGE))
          (COND
	    ((EQ TEXTURE (QUOTE NONE))
	      (RETURN NIL)))
          (AC.PRINT.MSG "Click the mouse inside the region to be textured.")
          (RESETLST (RESETSAVE (CURSOR POINTREADINGCURSOR))
		    (UNTILMOUSESTATE (OR LEFT MIDDLE RIGHT)))
          (COND
	    ((INSIDEP (WINDOWPROP WINDOW (QUOTE REGION))
		      LASTMOUSEX LASTMOUSEY)
	      (RESETLST (RESETSAVE (CURSOR WAITINGCURSOR))
			(FILLWITHTEXTURE WINDOW TEXTURE (LASTMOUSEX WINDOW)
					 (LASTMOUSEY WINDOW)
					 1)
			(BITBLT WINDOW 0 0 BITMAP 0 0 NIL NIL (QUOTE INPUT)
				(QUOTE REPLACE)))
	      (AC.SET.STATUS.BIT T)
	      (RETURN BITMAP))))))

(AC.TEXTURE.MENU.DELETE.ITEM
  (LAMBDA NIL                                                (* SCB: "24-Oct-85 09:50")
    (LET ((ITEM (MENU (create MENU
			      CENTERFLG ← T
			      TITLE ← "Delete item"
			      ITEMS ←(for FILLPAT in SK.FILLING.PATTERNS
					collect (LIST (CAR FILLPAT)
						      (KWOTE (CADR FILLPAT))))))))
      (SETQ SK.FILLING.PATTERNS (REMOVE (for X in SK.FILLING.PATTERNS thereis (EQUAL (CADR X)
										     ITEM))
					SK.FILLING.PATTERNS)))))

(AC.SET.FILL.OPTION
  (LAMBDA NIL                                                (* SCB: "15-Oct-85 14:59")
    (SELECTQ (MENU (COND
		     ((type? MENU AC.AREAFILL.OPTIONS.MENU)
		       AC.AREAFILL.OPTIONS.MENU)
		     (T (SETQ AC.AREAFILL.OPTIONS.MENU (create MENU
							       ITEMS ←(QUOTE (("Black" (QUOTE BLACK))
									       ("White" (QUOTE WHITE))
									       ))
							       TITLE ← "Fill with:"
							       CENTERFLG ← T)))))
	     (BLACK (SETQ AC.FILL.VALUE 1)
		    (SETQ AC.BOUNDARY.VALUE 1))
	     (WHITE (SETQ AC.FILL.VALUE 0)
		    (SETQ AC.BOUNDARY.VALUE 0))
	     (PROGN NIL))))

(AC.RUN
  (LAMBDA (SEQ WINDOW XOFFSET YOFFSET TIMER)                 (* SCB: "21-Oct-85 16:59")
    (for FRAME in SEQ do ((AC.UPDATE.STATUS.WINDOW)
			  (SETQ TIMER (SETUPTIMER (fetch (ACE.FRAME DELAY) of FRAME)
						  TIMER
						  (QUOTE MILLISECONDS)))
			  (for FRAME.PART in (fetch (ACE.FRAME BLITS) of FRAME)
			     do (BITBLT (fetch (ACE.BLIT BITMAP) of FRAME.PART)
					NIL NIL WINDOW (IPLUS XOFFSET (fetch (ACE.BLIT XCOOR)
									 of FRAME.PART))
					(IPLUS YOFFSET (fetch (ACE.BLIT YCOOR) of FRAME.PART))
					NIL NIL (QUOTE INPUT)
					(QUOTE REPLACE)))
			  (SETQ AC.CURRENT.FRAME.NUMBER (ADD1 AC.CURRENT.FRAME.NUMBER))
			  (BLOCK)
			  (until (TIMEREXPIRED? TIMER (QUOTE MILLISECONDS)) do (BLOCK))))
    (SETQ AC.CURRENT.FRAME.NUMBER (SUB1 AC.CURRENT.FRAME.NUMBER))))

(AC.RUN.SEQUENCE
  (LAMBDA NIL                                                (* SCB: "21-Sep-85 15:20")
    (COND
      ((AC.CHECK (QUOTE ACE.CURRENT.SEQUENCE))
	(RECLAIM)
	(SETQ AC.CURRENT.FRAME.NUMBER 1)
	(AC.RUN ACE.CURRENT.SEQUENCE ACE.SEQ.WINDOW ACE.SEQ.WINDOW.XOFF ACE.SEQ.WINDOW.YOFF)
	(SETQ ACE.FRAME.TAIL NIL)
	(SETQ ACE.CURRENT.FRAME (LAST ACE.CURRENT.SEQUENCE))))))

(AC.RUN.SEQUENCE.REPEAT
  (LAMBDA NIL                                                (* SCB: "22-May-86 20:45")
    (COND
      ((CDR ACE.CURRENT.SEQUENCE)                          (* If there is more than one frame.)
                                                             (* TTY.PROCESS (THIS.PROCESS))
	(WINDOWPROP ACE.SEQ.WINDOW (QUOTE AC.STOP.FLAG)
		      NIL)

          (* Note that putting the stop button on the window makes AC.MAIN.MENU.WHENSELECTEDFN punt menu operations so they 
	  can't get screwed by queueing a menu op during the movie.)


	(AC.ADD.STOP.BUTTON ACE.SEQ.WINDOW)
	(until (WINDOWPROP ACE.SEQ.WINDOW (QUOTE AC.STOP.FLAG))
	       do
	       (AC.RUN.SEQUENCE))
	(WINDOWPROP ACE.SEQ.WINDOW (QUOTE AC.STOP.FLAG)
		      NIL)
	(LET ((W (WINDOWPROP ACE.SEQ.WINDOW (QUOTE AC.STOP.WINDOW))))
	     (AND W (PROGN (CLOSEW W)                  (* Flush the window so that menu operations can 
							     continue.)
			       (WINDOWPROP ACE.SEQ.WINDOW (QUOTE AC.STOP.WINDOW)
					     NIL))))))))

(AC.ADD.STOP.BUTTON
  (LAMBDA (WINDOW)                                           (* SCB: "22-May-86 20:43")
                                                             (* See the comment in AC.RUN.SEQUENCE.REPEAT about the
							     meaning of the stop window.)
    (PROG (MENU MENUW)
	    (SETQ MENU (create MENU ITEMS ← (QUOTE (("STOP" (QUOTE STOP))))
				 WHENSELECTEDFN ← (BQUOTE (LAMBDA (ITEM)
							      (WINDOWPROP (QUOTE , WINDOW)
									    (QUOTE AC.STOP.FLAG)
									    T)))
				 CENTERFLG ← T))
	    (SETQ MENUW (MENUWINDOW MENU NIL))
	    (ATTACHWINDOW MENUW WINDOW (QUOTE TOP)
			    (QUOTE RIGHT)
			    (QUOTE LOCALCLOSE))
	    (WINDOWPROP WINDOW (QUOTE AC.STOP.WINDOW)
			  MENUW)
	    (OPENW MENUW))))

(AC.RUN.SEQUENCE.REPEAT1
  (LAMBDA NIL                                                (* SCB: "26-Sep-85 19:52")
    (TTY.PROCESS (THIS.PROCESS))
    (until (READP)
       do (AC.RUN.SEQUENCE)
	  (BLOCK))
    (CLEARBUF)))

(AC.CLEAR.AUTO.REPEAT
  (LAMBDA (ID)                                               (* SCB: " 2-Oct-85 16:56")
    (NCP.CardProp ID (QUOTE AUTO.REPEAT)
		  NIL)))

(AC.SET.AUTO.REPEAT
  (LAMBDA (ID)                                               (* SCB: " 2-Oct-85 16:55")
    (NCP.CardProp ID (QUOTE AUTO.REPEAT)
		  T)))

(AC.TOGGLE.AUTO.REPEAT
  (LAMBDA (ID)                                               (* SCB: " 2-Oct-85 16:57")
    (NCP.CardProp ID (QUOTE AUTO.REPEAT)
		  (NOT (NCP.CardProp ID (QUOTE AUTO.REPEAT))))))

(AC.SPECIFY.SEQUENCE.WINDOW.POSITION
  (LAMBDA (ID)                                               (* SCB: "15-Oct-85 17:13")
    (PROG (REGION)
          (SELECTQ (MENU (COND
			   ((type? MENU AC.SPECIFY.WINDOW.POSITION.MENU)
			     AC.SPECIFY.WINDOW.POSITION.MENU)
			   (T (SETQ AC.SPECIFY.WINDOW.POSITION.MENU
				(create MENU
					ITEMS ←(QUOTE (("Lock Card at Current Position" (QUOTE LOCK)
											
					"Make the card be brought up at this position next time.")
							("Type in Locked Coordinates" (QUOTE TYPEIN)
										      
	       "Type in the size and position of where this card should be brought up next time.")
							("Unlock Card Position" (QUOTE UNLOCK)
										
					    "Make the card not be brought up at locked position.")))
					TITLE ← "Specify Position"
					CENTERFLG ← T)))))
		   (LOCK (NCP.CardProp ID (QUOTE CARD.ORIGINAL.REGION)
				       (WINDOWPROP ACE.SEQ.WINDOW (QUOTE REGION)))
			 (AC.PRINT.MSG "Card locked at current position."))
		   (TYPEIN (PROG (XPOS YPOS)
			         (SETQ XPOS (AC.PROMPT "X-position of lower left corner = ?"))
			         (SETQ YPOS (AC.PROMPT "Y-position of lower left corner = ?"))
			         (SETQ REGION (CREATEREGION XPOS YPOS ACE.SEQ.WIDTH ACE.SEQ.HEIGHT))
			         (NCP.CardProp ID (QUOTE CARD.ORIGINAL.REGION)
					       REGION)))
		   (UNLOCK (NCP.CardProp ID (QUOTE CARD.ORIGINAL.REGION)
					 NIL)
			   (AC.PRINT.MSG "Card Unlocked."))
		   (PROGN                                    (* DO NOTHING)
			  NIL)))))

(AC.SET.TIMING.DELAYS
  (LAMBDA (ID)                                               (* SCB: "11-Oct-85 13:25")
                                                             (* For setting delays (in MSECs) between frames.
							     Lots of work needed here; esp.
							     delay in-betweening)
    (SELECTQ (MENU (OR ACE.DELAY.MENU (SETQ ACE.DELAY.MENU (create MENU
								   ITEMS ←(QUOTE
								     (("Set Delay on a Frame"
									 (QUOTE FDELAY)
									 
							"Adjust the delay on any frame by number")
								       ("Reset Entire Sequence"
									 (QUOTE SDELAY)
									 
								   "Set the delay on every frame")))
								   CENTERFLG ← T
								   TITLE ← 
								   "Sequence Timing Adjustments"))))
	     (NIL NIL)
	     (SDELAY (AC.SET.TIMING.DELAYS.ALL ID))
	     (FDELAY (AC.SET.TIMING.DELAYS.FRAME ID))
	     NIL)))

(AC.SET.TIMING.DELAYS.ALL
  (LAMBDA (ID)                                               (* SCB: "11-Oct-85 13:24")
    (PROG (NEW.DELAY.VALUE)
          (COND
	    ((FIXP (SETQ NEW.DELAY.VALUE (AC.PROMPT "Enter Delay for Entire Sequence: "))))
	    (T (RETURN NIL)))
          (for FRAME in ACE.CURRENT.SEQUENCE do (replace (ACE.FRAME DELAY) of FRAME with 
										  NEW.DELAY.VALUE))
          (PUTPROP ID (QUOTE EDITED)
		   T))))

(AC.SET.TIMING.DELAYS.FRAME
  (LAMBDA (ID)                                               (* SCB: "11-Oct-85 13:25")
    (PROG (CHOICE FRAME)
      LOOP(SETQ CHOICE (MENU (create MENU
				     ITEMS ←(NCONC1 (for FRAME in ACE.CURRENT.SEQUENCE
						       bind (COUNT ← 0)
						       collect ((SETQ COUNT (ADD1 COUNT))
								(LIST (CONCAT "Frame " COUNT " : "
									      (fetch (ACE.FRAME
										       DELAY)
										 of FRAME))
								      COUNT)))
						    (QUOTE (Quit (QUOTE QUIT)
								 "Stop adjusting delays")))
				     TITLE ← "Frame Delays"
				     WHENHELDFN ←(QUOTE ACE.DELAY.FRAME.ASST))))
          (COND
	    ((NULL CHOICE)
	      NIL)
	    ((EQ CHOICE (QUOTE QUIT))
	      (RETURN NIL))
	    (T (SETQ FRAME (CAR (NTH ACE.CURRENT.SEQUENCE CHOICE)))
	       (AND FRAME (PROGN (replace (ACE.FRAME DELAY) of FRAME
				    with (COND
					   ((FIXP (SETQ CHOICE (AC.PROMPT (CONCAT "Frame " CHOICE 
										  "; New Delay: "))))
					     CHOICE)
					   (T 0)))
				 (PUTPROP ID (QUOTE EDITED)
					  T)))))
          (GO LOOP))))
)
(* * I/O and Utilities)

(DEFINEQ

(AC.CHECK
  (LAMBDA (SYMBOL)                                           (* SCB: "20-Sep-85 17:15")
                                                             (* FLASHW PROMPTWINDOW)
    (PROG NIL
          (SELECTQ SYMBOL
		   (ACE.CURRENT.SEQUENCE (if (NULL ACE.CURRENT.SEQUENCE)
					     then (AC.PRINT.MSG "No Current Sequence.")
						  (RETURN NIL)))
		   (ACE.CURRENT.FRAME (if (NULL ACE.CURRENT.FRAME)
					  then (AC.PRINT.MSG "No Current Frame.")
					       (RETURN NIL)))
		   (ACE.FRAME.TAIL (if (NULL ACE.FRAME.TAIL)
				       then (AC.PRINT.MSG "Sequence is at the end.")
					    (RETURN NIL)))
		   (ERROR "Unknown symbol in AC.CHECK" SYMBOL))
          (RETURN T))))

(AC.CONFIRM
  (LAMBDA (CONFIRMSTRING FLG WHICHKEYS?)                     (* SCB: "17-Sep-85 21:21")

          (* Prints CONFIRMSTRING in A.C.W prompt region; then waits for the button form WHICHKEYS? to become true.
	  WHICHKEYS? defaults to LEFT. Code identfies the valid button forms)


    (OR WHICHKEYS? (SETQ WHICHKEYS? (QUOTE LEFT)))
    (AC.PRINT.MSG CONFIRMSTRING FLG)
    (DISMISS 100 NIL T)
    (RESETFORM (CURSOR (SELECTQ WHICHKEYS?
				(LEFT ACE.LEFTMOUSE.CURSOR)
				(MIDDLE ACE.MIDDLEMOUSE.CURSOR)
				(RIGHT ACE.RIGHTMOUSE.CURSOR)
				(ANY (PROGN (SETQ WHICHKEYS? (QUOTE (NOT UP)))
					    ACE.ALLMOUSE.CURSOR))
				NIL))
	       (do (GETMOUSESTATE) until (NEQ LASTMOUSEBUTTONS 0))
	       (PROG1 (EVAL (MOUSESTATE-EXPR WHICHKEYS? T))
		      (do (GETMOUSESTATE) until (EQP LASTMOUSEBUTTONS 0))))))

(AC.PRINT.MSG
  (LAMBDA (MESSAGE INHIBIT.NEW.LINEP)                        (* SCB: "20-Sep-85 16:57")
    (COND
      ((NULL INHIBIT.NEW.LINEP)
	(TERPRI PROMPTWINDOW)))
    (PRIN1 MESSAGE PROMPTWINDOW)
    NIL))

(AC.PROMPT
  (LAMBDA (MESSAGE)                                          (* SCB: " 7-Oct-85 14:51")
    (LET ((OLDSTREAM (TTYDISPLAYSTREAM PROMPTWINDOW))
       (OLDPROCESS (TTY.PROCESS))
       (RESULT))
      (PRIN1 MESSAGE)
      (TTY.PROCESS (THIS.PROCESS))
      (SETQ RESULT (READ))
      (TTYDISPLAYSTREAM OLDSTREAM)
      (TTY.PROCESS OLDPROCESS)
      RESULT)))

(AC.CHECK.CURRENT.CARD
  (LAMBDA NIL                                                (* SCB: "11-Oct-85 15:19")
    (COND
      ((NULL AC.RECORD)
	(PRINT "AC.RECORD is NULL")))
    (COND
      ((NULL ACE.CURRENT.SEQUENCE)
	(PRINT "ACE.CURRENT.SEQUENCE is NULL.")))
    (COND
      ((NULL AC.SKETCH.SEQUENCE)
	(PRINT "AC.SKETCH.SEQUENCE is NULL.")))
    (COND
      ((NULL AC.STATUS.SEQUENCE)
	(PRINT "AC.STATUS.SEQUENCE is NULL.")))
    (LET ((LEN (LENGTH ACE.CURRENT.SEQUENCE)))
      (COND
	((NOT (IEQP LEN (LENGTH AC.SKETCH.SEQUENCE)))
	  (PRINT "ACE.CURRENT.SEQUENCE and AC.SKETCH.SEQUENCE not the same length.")))
      (COND
	((NOT (IEQP LEN (LENGTH AC.STATUS.SEQUENCE)))
	  (PRINT "ACE.CURRENT.SEQUENCE and AC.STATUS.SEQUENCE not the same length."))))
    (COND
      ((NOT (EQ ACE.CURRENT.SEQUENCE (fetch BITMAP.SEQUENCE of AC.RECORD)))
	(PRINT "ACE.CURRENT.SEQUENCE not part of AC.RECORD")))
    (COND
      ((NOT (EQ AC.SKETCH.SEQUENCE (fetch SKETCH.SEQUENCE of AC.RECORD)))
	(PRINT "AC.SKETCH.SEQUENCE not part of AC.RECORD")))
    (COND
      ((NOT (EQ AC.STATUS.SEQUENCE (fetch STATUS.SEQUENCE of AC.RECORD)))
	(PRINT "AC.STATUS.SEQUENCE not part of AC.RECORD")))))

(AC.CHECK.CARD
  (LAMBDA (ID)                                               (* SCB: "11-Oct-85 15:38")
    (PROG (AC.RECORD ACE.CURRENT.SEQUENCE AC.SKETCH.SEQUENCE AC.STATUS.SEQUENCE)
          (COND
	    ((NEQ (QUOTE Animation)
		  (NCP.CardType ID))
	      (RETURN NIL)))
          (NCP.ActivateCards ID)
          (TERPRI)
          (PRIN1 "ID = ")
          (PRIN1 ID)
          (TERPRI)
          (SETQ AC.RECORD (NC.FetchSubstance ID))
          (SETQ ACE.CURRENT.SEQUENCE (fetch BITMAP.SEQUENCE of AC.RECORD))
          (SETQ AC.SKETCH.SEQUENCE (fetch SKETCH.SEQUENCE of AC.RECORD))
          (SETQ AC.STATUS.SEQUENCE (fetch STATUS.SEQUENCE of AC.RECORD))
          (COND
	    ((NULL AC.RECORD)
	      (PRINT "AC.RECORD is NULL")))
          (COND
	    ((NULL ACE.CURRENT.SEQUENCE)
	      (PRINT "ACE.CURRENT.SEQUENCE is NULL.")))
          (COND
	    ((NULL AC.SKETCH.SEQUENCE)
	      (PRINT "AC.SKETCH.SEQUENCE is NULL.")))
          (COND
	    ((NULL AC.STATUS.SEQUENCE)
	      (PRINT "AC.STATUS.SEQUENCE is NULL.")))
          (LET ((LEN (LENGTH ACE.CURRENT.SEQUENCE)))
	    (COND
	      ((NOT (IEQP LEN (LENGTH AC.SKETCH.SEQUENCE)))
		(PRINT "ACE.CURRENT.SEQUENCE and AC.SKETCH.SEQUENCE not the same length.")))
	    (COND
	      ((NOT (IEQP LEN (LENGTH AC.STATUS.SEQUENCE)))
		(PRINT "ACE.CURRENT.SEQUENCE and AC.STATUS.SEQUENCE not the same length.")))))))

(AC.CHECK.ALL.CARDS
  (LAMBDA NIL                                                (* SCB: "11-Oct-85 15:41")
    (NCP.MapCards (FUNCTION AC.CHECK.CARD))))
)
(AC.INITIALIZE)

(RPAQ AC.ANIMATION.ICON.BITMAP (READBITMAP))
(21 18
"OD@AGH@@"
"ODOIGH@@"
"IDHIDH@@"
"IBGBDH@@"
"OC@FGH@@"
"OAOLGH@@"
"O@@@GH@@"
"OOOOOH@@"
"O@G@GH@@"
"I@HHDH@@"
"I@HHDH@@"
"OA@DGH@@"
"OA@DGH@@"
"OCMNGH@@"
"OCEFGH@@"
"OEMMGH@@"
"ID@ADH@@"
"IDBADH@@")
(PUTPROP (QUOTE Animation)
	 (QUOTE NCTYPEBITMAP)
	 AC.ANIMATION.ICON.BITMAP)

(PUTPROPS ACE.UPD.CONTROL.WINDOW READVICE (NIL (BEFORE NIL (RETURN T))))

(PUTPROPS MENUBUTTONFN READVICE (NIL (BEFORE NIL (SETQ AC.CURRENT.WINDOW W))))

(PUTPROPS NC.TitleBarButtonEventFn READVICE (NIL (BEFORE NIL (SETQ AC.CURRENT.WINDOW Window))))
(READVISE ACE.UPD.CONTROL.WINDOW MENUBUTTONFN NC.TitleBarButtonEventFn)
(PUTPROPS ANIMATION2 COPYRIGHT ("Xerox Corporation" 1985 1986))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (3319 5029 (AC.ADD.ANIMATION.CARD.TYPE 3329 . 4318) (AC.ADD.FILM.SUBSTANCE.TYPE 4320 . 
5027)) (5062 11520 (AC.ANIMATION.CARD.MAKE.CARD.FN 5072 . 5388) (AC.ANIMATION.CARD.EDIT.CARD.FN 5390
 . 5827) (AC.ANIMATION.CARD.QUIT.CARD.FN 5829 . 6479) (AC.ANIMATION.CARD.GET.CARD.FN 6481 . 6782) (
AC.BUFFERED.BIN 6784 . 6945) (AC.ANIMATION.CARD.GET.CARD.FN2 6947 . 8246) (
AC.ANIMATION.CARD.PUT.CARD.FN 8248 . 8870) (AC.ANIMATION.CARD.PUT.CARD.FN2 8872 . 10360) (
AC.ANIMATION.CARD.COPY.CARD.FN 10362 . 11109) (AC.ANIMATION.CARD.MARK.CARD.DIRTY.FN 11111 . 11300) (
AC.ANIMATION.CARD.CARD.DIRTYP.FN 11302 . 11518)) (11547 80018 (AC.PROCESS.TOP.LEVEL 11557 . 12192) (
AC.WAIT.UNTIL.FREE 12194 . 12416) (AC.TELL.PROCESS 12418 . 12779) (AC.TELL.PROCESS* 12781 . 13199) (
AC.MAKE.CARD 13201 . 13716) (AC.MAKE.CARD.INTERNAL 13718 . 14176) (AC.EDIT.CARD 14178 . 14849) (
AC.EDIT.CARD.INTERNAL 14851 . 15636) (AC.INITIALIZE.SEQUENCE.AND.WINDOW 15638 . 17533) (
AC.DEFINE.SEQUENCE.WINDOW.REGION 17535 . 19262) (AC.CREATE.SEQUENCE.WINDOW 19264 . 19797) (
AC.INITIALIZE.VARS.FOR.PROCESS 19799 . 20030) (AC.ESTABLISH.MENUS 20032 . 20597) (AC.DEESTABLISH.MENUS
 20599 . 21057) (AC.CARD.BUTTONEVENTFN 21059 . 21552) (AC.CARD.RIGHTBUTTONFN 21554 . 22778) (
AC.INITIALIZE 22780 . 23364) (AC.INITIALIZE.DEFS 23366 . 23555) (AC.INITIALIZE.ACE.CONSTANTS 23557 . 
24204) (AC.CREATE.MAIN.MENU 24206 . 26508) (AC.INITIALIZE.MAIN.MENU 26510 . 26752) (
AC.INITIALIZE.NOTECARDS.MENU 26754 . 29679) (AC.MAIN.MENU.WHENSELECTEDFN 29681 . 32225) (
AC.ACTIVE.WINDOW 32227 . 32693) (AC.RESET.ACE.VARIABLES 32695 . 33356) (AC.SAVE.STATE.TO.NOTECARD 
33358 . 33668) (AC.RESTORE.STATE.FROM.NOTECARD 33670 . 34234) (AC.FIX.MAIN.MENU 34236 . 34926) (
AC.INITIALIZE.STATUS.WINDOW 34928 . 35368) (AC.UPDATE.STATUS.WINDOW 35370 . 35550) (
AC.DISPLAY.FRAME.NUMBER 35552 . 35986) (AC.MOVE.TO.NEXT.FRAME 35988 . 37175) (
AC.MOVE.TO.PREVIOUS.FRAME 37177 . 37640) (AC.GOTO.FRAME.N 37642 . 38143) (AC.DELETE.CURRENT.FRAME 
38145 . 40786) (BUTLAST! 40788 . 41043) (AC.INSERT.NEW.FRAME 41045 . 42211) (
AC.INSERT.COPY.OF.ANOTHER.FRAME 42213 . 44556) (AC.COMPILE.FRAME 44558 . 46686) (
AC.INITIALIZE.SEQUENCE 46688 . 48465) (AC.INITIALIZE.EDIT.FRAME.MENU 48467 . 50360) (
AC.EDIT.FRAME.MENU.WHENSELECTEDFN 50362 . 53014) (AC.EDIT.FRAME2 53016 . 54269) (
AC.EDIT.FRAME.DISPATCH 54271 . 55636) (AC.EDIT.FRAME.UNDO 55638 . 56268) (AC.EDIT.FRAME.DONE 56270 . 
57052) (AC.EDIT.FRAME.ABORT 57054 . 57563) (AC.EDIT.FRAME.WITH.PAINT 57565 . 58006) (
AC.CONVERT.SCREEN.REGION.TO.WINDOW.REGION 58008 . 58727) (AC.EDIT.FRAME.CLEAR.REGION 58729 . 59070) (
AC.EDIT.FRAME.INVERT.REGION 59072 . 59416) (AC.EDIT.FRAME.SET.REGION 59418 . 59757) (
AC.TRACK.MOUSE.WITH.BITMAP 59759 . 60663) (AC.EDIT.FRAME.COPY.REGION 60665 . 61893) (
AC.EDIT.FRAME.MOVE.REGION 61895 . 63335) (AC.EDIT.FRAME.AS.BITMAP 63337 . 63524) (
AC.EDIT.FRAME.AS.SKETCH 63526 . 66728) (AC.SKETCH.MENU.WHENSELECTEDFN 66730 . 67066) (
AC.INITIALIZE.SKETCH.MENU 67068 . 67589) (AC.BITBLT.FROM.SKETCH.WINDOW 67591 . 67957) (
AC.GET.STATUS.BIT 67959 . 68142) (AC.SET.STATUS.BIT 68144 . 68419) (
AC.MOVE.SEQUENCE.WINDOW.BEHIND.SKETCH.WINDOW 68421 . 68744) (AC.AREAFILL 68746 . 69466) (
AC.TEXTURE.AREA 69468 . 70383) (AC.TEXTURE.MENU.DELETE.ITEM 70385 . 70934) (AC.SET.FILL.OPTION 70936
 . 71608) (AC.RUN 71610 . 72544) (AC.RUN.SEQUENCE 72546 . 72967) (AC.RUN.SEQUENCE.REPEAT 72969 . 74089
) (AC.ADD.STOP.BUTTON 74091 . 74908) (AC.RUN.SEQUENCE.REPEAT1 74910 . 75171) (AC.CLEAR.AUTO.REPEAT 
75173 . 75346) (AC.SET.AUTO.REPEAT 75348 . 75517) (AC.TOGGLE.AUTO.REPEAT 75519 . 75741) (
AC.SPECIFY.SEQUENCE.WINDOW.POSITION 75743 . 77375) (AC.SET.TIMING.DELAYS 77377 . 78285) (
AC.SET.TIMING.DELAYS.ALL 78287 . 78784) (AC.SET.TIMING.DELAYS.FRAME 78786 . 80016)) (80049 85494 (
AC.CHECK 80059 . 80833) (AC.CONFIRM 80835 . 81758) (AC.PRINT.MSG 81760 . 81995) (AC.PROMPT 81997 . 
82410) (AC.CHECK.CURRENT.CARD 82412 . 83761) (AC.CHECK.CARD 83763 . 85321) (AC.CHECK.ALL.CARDS 85323
 . 85492)))))
STOP