(FILECREATED " 6-Sep-85 08:52:00" {ERIS}<LISPCORE>LIBRARY>GRAPHZOOM.;7 19993  

      changes to:  (FNS SCALE.GRAPH.NODE)

      previous date: "14-Jun-85 13:42:43" {ERIS}<LISPCORE>LIBRARY>GRAPHZOOM.;5)


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

(PRETTYCOMPRINT GRAPHZOOMCOMS)

(RPAQQ GRAPHZOOMCOMS ((FILES GRAPHER)
	(RECORDS ZOOMGRAPH ZOOMGRAPHNODE)
	(FNS MAKE.ZOOM.GRAPH ORIG.NODE.OF.GRAPH SCALE.GRAPH.FONT SCALE.GRAPH.NODE SCALE.GRAPH.NODES 
	     SCALE.GRAPH RESET.GRAPH.EXTENT ZOOM.GRAPH.WINDOW ADJUST.EXTENT ZOOM.GRAPH.ADDLINKFN 
	     ZOOM.GRAPH.ADDNODEFN ZOOM.GRAPH.DELETELINKFN ZOOM.GRAPH.DELETENODEFN 
	     ZOOM.GRAPH.FONTCHANGEFN ZOOM.GRAPH.MOVENODEFN SHOWZOOMGRAPH ZOOM.TO.CENTER)
	(COMS (* general functions for scaling)
	      (FNS ABSWXOFFSET ABSWYOFFSET SCALE.REGION UNSCALE.POSITION SCALE.POSITION WINDOW.SCALE))
	(COMS (FNS PRESS.DECREASING.FONT.LIST IP.DECREASING.FONT.LIST)
	      (GLOBALVARS PRESS.DECREASING.FONT.LIST IP.DECREASING.FONT.LIST)
	      (INITVARS PRESS.DECREASING.FONT.LIST IP.DECREASING.FONT.LIST))))
(FILESLOAD GRAPHER)
[DECLARE: EVAL@COMPILE 

(RECORD ZOOMGRAPH (NODELST DISPLAYGRAPH SG.MOVENODEFN SG.ADDNODEFN SG.DELETENODEFN SG.ADDLINKFN 
			   SG.DELETELINKFN))

(RECORD ZOOMGRAPHNODE (SG.POSITION SG.FONT SG.LABEL SG.USERDATA SG.))
]
(DEFINEQ

(MAKE.ZOOM.GRAPH
  [LAMBDA (GRAPH SCALE)                                      (* rrb " 6-NOV-83 12:07")
                                                             (* returns a graph that is a scaled version of GRAPH)
    (create GRAPH
	    GRAPHNODES ←(SCALE.GRAPH.NODES (fetch (GRAPH GRAPHNODES) of GRAPH)
					   SCALE)
	    SIDESFLG ←(fetch (GRAPH SIDESFLG) of GRAPH)
	    DIRECTEDFLG ←(fetch (GRAPH DIRECTEDFLG) of GRAPH)
	    GRAPH.MOVENODEFN ←(FUNCTION ZOOM.GRAPH.MOVENODEFN)
	    GRAPH.ADDNODEFN ←(FUNCTION ZOOM.GRAPH.ADDNODEFN)
	    GRAPH.DELETENODEFN ←(FUNCTION ZOOM.GRAPH.DELETENODEFN)
	    GRAPH.ADDLINKFN ←(FUNCTION ZOOM.GRAPH.ADDLINKFN)
	    GRAPH.DELETELINKFN ←(FUNCTION ZOOM.GRAPH.DELETELINKFN)
	    GRAPH.FONTCHANGEFN ←(FUNCTION ZOOM.GRAPH.FONTCHANGEFN])

(ORIG.NODE.OF.GRAPH
  [LAMBDA (NODE INGRAPH CORRESGRAPH)                         (* rrb " 1-NOV-83 19:02")
                                                             (* returns the node in CORRESGRAPH corresponding to NODE
							     in INGRAPH.)
    (bind (NODEID ←(fetch (GRAPHNODE NODEID) of NODE)) for INND in (fetch (GRAPH GRAPHNODES)
								      of INGRAPH)
       as CORND in (fetch (GRAPH GRAPHNODES) of CORRESGRAPH) when (EQ (fetch (GRAPHNODE NODEID)
									 of INND)
								      NODEID)
       do (RETURN CORND])

(SCALE.GRAPH.FONT
  [LAMBDA (FONT SCALE)                                       (* rrb " 1-NOV-83 18:23")
                                                             (* returns the closest font for this scale.)

          (* "LABEL" is an approximation of the label string. A fixed one is used rather than the label of the node so that 
	  all labels in the same font will scale to the same font.)


    (SCALE.FONT (QUOTIENT (STRINGWIDTH "LABEL" FONT)
			  SCALE)
		"LABEL"])

(SCALE.GRAPH.NODE
  [LAMBDA (NODE SCALE)                                       (* rrb " 6-Sep-85 08:51")
                                                             (* returns a node that has been scaled.)
                                                             (* keeps the same id's so that the links don't have to 
							     change.)
                                                             (* SCALE is the reciprocal of scaling done in 
							     SCALE/GRAPH)

          (* this used to be create copying but this fails in the case where the nodeid is a list structure because node 
	  checks are done with EQ. -
	  rrb)


    (create GRAPHNODE using NODE NODEPOSITION ←(SCALE.POSITION (fetch (GRAPHNODE NODEPOSITION)
								  of NODE)
							       SCALE)
			    NODEFONT ←(SCALE.GRAPH.FONT (fetch (GRAPHNODE NODEFONT) of NODE)
							SCALE])

(SCALE.GRAPH.NODES
  [LAMBDA (NODELST SCALE)                                    (* rrb " 1-NOV-83 11:05")
                                                             (* scales a list of nodes)
    (for NODE in NODELST collect (SCALE.GRAPH.NODE NODE SCALE])

(SCALE.GRAPH
  [LAMBDA (SGWINDOW)                                         (* rrb " 8-NOV-83 12:35")
                                                             (* takes the SKETCH.GRAPH in SGWINDOW and recomputes it 
							     to its current scale)
    (PROG [(SCALEDGRAPH (MAKE.ZOOM.GRAPH (WINDOWPROP SGWINDOW (QUOTE SKETCH.GRAPH))
					 (WINDOWPROP SGWINDOW (QUOTE SCALE]
          (WINDOWPROP SGWINDOW (QUOTE GRAPH)
		      SCALEDGRAPH)
          (RESET.GRAPH.EXTENT SCALEDGRAPH SGWINDOW)
          (RETURN SCALEDGRAPH])

(RESET.GRAPH.EXTENT
  [LAMBDA (GRAPH WINDOW)                                     (* sets the extent of the graph onto the extent window 
							     property)
    (WINDOWPROP WINDOW (QUOTE EXTENT)
		(GRAPHREGION GRAPH])

(ZOOM.GRAPH.WINDOW
  [LAMBDA (ITEM MENU BUTTON)                                 (* rrb " 8-NOV-83 13:47")
                                                             (* zooms the main sketch graph window.)
    (PROG ((MAINW (WINDOWPROP (WFROMMENU MENU)
			      (QUOTE MAINWINDOW)))
	   (SMALLOUTFACTOR 1.1)
	   (LARGEOUTFACTOR 1.8)
	   SMALLINFACTOR LARGEINFACTOR)                      (* factors are reciprocals so that IN followed by small 
							     OUT should return to the same place.)
          (SETQ SMALLINFACTOR (FQUOTIENT 1.0 SMALLOUTFACTOR))
          (SETQ LARGEINFACTOR (FQUOTIENT 1.0 LARGEOUTFACTOR))
                                                             (* set the SCALE and offsets)
          (ZOOM.TO.CENTER MAINW (SELECTQ (CADR (CADR ITEM))
					 (IN (SELECTQ BUTTON
						      (MIDDLE LARGEINFACTOR)
						      SMALLINFACTOR))
					 (SELECTQ BUTTON
						  (MIDDLE LARGEOUTFACTOR)
						  SMALLOUTFACTOR)))
                                                             (* rescale the graph)
          (SCALE.GRAPH MAINW)
          (ADJUST.EXTENT MAINW)
          (REDISPLAYGRAPH MAINW])

(ADJUST.EXTENT
  [LAMBDA (WINDOW)                                           (* rrb " 8-NOV-83 13:51")

          (* adjust the offsets of WINDOW so that the visible region of the window is all extent. If there is more visible 
	  region than extent, it centers the extent.)


    (PROG ((EXTENT (WINDOWPROP WINDOW (QUOTE EXTENT)))
	   (REG (DSPCLIPPINGREGION NIL WINDOW))
	   REGOFF REGEXT EXTOFF EXTEXT)
          (COND
	    ((GREATERP (SETQ REGEXT (fetch (REGION WIDTH) of REG))
		       (SETQ EXTEXT (fetch (REGION WIDTH) of EXTENT)))
                                                             (* center in X)
	      (ABSWXOFFSET (DIFFERENCE (fetch (REGION LEFT) of EXTENT)
				       (IQUOTIENT (IDIFFERENCE REGEXT EXTEXT)
						  2))
			   WINDOW))
	    ((GREATERP (SETQ EXTOFF (fetch (REGION LEFT) of EXTENT))
		       (SETQ REGOFF (fetch (REGION LEFT) of REG)))
                                                             (* move it to the left)
	      (ABSWXOFFSET EXTOFF WINDOW))
	    ((GREATERP (IPLUS REGOFF REGEXT)
		       (SETQ EXTOFF (IPLUS EXTOFF EXTEXT)))
                                                             (* move it to the right)
	      (ABSWXOFFSET (DIFFERENCE EXTOFF REGEXT)
			   WINDOW)))
          (COND
	    ((GREATERP (SETQ REGEXT (fetch (REGION HEIGHT) of REG))
		       (SETQ EXTEXT (fetch (REGION HEIGHT) of EXTENT)))
                                                             (* center in Y)
	      (ABSWYOFFSET (DIFFERENCE (fetch (REGION BOTTOM) of EXTENT)
				       (IQUOTIENT (IDIFFERENCE REGEXT EXTEXT)
						  2))
			   WINDOW))
	    ((GREATERP (SETQ EXTOFF (fetch (REGION BOTTOM) of EXTENT))
		       (SETQ REGOFF (fetch (REGION BOTTOM) of REG)))
                                                             (* move it up)
	      (ABSWYOFFSET EXTOFF WINDOW))
	    ((GREATERP (IPLUS REGOFF REGEXT)
		       (SETQ EXTOFF (IPLUS EXTOFF EXTEXT)))
                                                             (* move it down)
	      (ABSWYOFFSET (DIFFERENCE EXTOFF REGEXT)
			   WINDOW])

(ZOOM.GRAPH.ADDLINKFN
  [LAMBDA (FROM TO GRAPH WINDOW)                             (* rrb " 6-NOV-83 12:08")
                                                             (* the link adding function for a sketch graph.)
    (PROG [(ORGGRAPH (WINDOWPROP WINDOW (QUOTE SKETCH.GRAPH]
          (GRAPHADDLINK (ORIG.NODE.OF.GRAPH FROM GRAPH ORGGRAPH)
			(ORIG.NODE.OF.GRAPH TO GRAPH ORGGRAPH)
			ORGGRAPH WINDOW])

(ZOOM.GRAPH.ADDNODEFN
  [LAMBDA (GRAPH WINDOW)                                     (* rrb " 1-NOV-83 17:46")
                                                             (* the node adding function for a sketch graph.)
    (PROG (NEWNODE)
          (COND
	    ((SETQ NEWNODE (GRAPHADDNODE (WINDOWPROP WINDOW (QUOTE SKETCH.GRAPH))
					 WINDOW))            (* calls the graphs addnode function to create the node 
							     then scale it to the sketch window.)
	      (RETURN (SCALE.GRAPH.NODE NEWNODE (WINDOWPROP WINDOW (QUOTE SCALE])

(ZOOM.GRAPH.DELETELINKFN
  [LAMBDA (FROM TO GRAPH WINDOW)                             (* rrb " 6-NOV-83 12:08")
                                                             (* the link adding function for a sketch graph.)
    (PROG [(ORGGRAPH (WINDOWPROP WINDOW (QUOTE SKETCH.GRAPH]
          (GRAPHDELETELINK (ORIG.NODE.OF.GRAPH FROM GRAPH ORGGRAPH)
			   (ORIG.NODE.OF.GRAPH TO GRAPH ORGGRAPH)
			   ORGGRAPH WINDOW])

(ZOOM.GRAPH.DELETENODEFN
  [LAMBDA (NODE GRAPH WINDOW)                                (* rrb " 6-NOV-83 12:08")
                                                             (* the node deleting function for a sketch graph.)
    (PROG [(ORGGRAPH (WINDOWPROP WINDOW (QUOTE SKETCH.GRAPH]
          (RETURN (GRAPHDELETENODE (ORIG.NODE.OF.GRAPH NODE GRAPH ORGGRAPH)
				   ORGGRAPH WINDOW])

(ZOOM.GRAPH.FONTCHANGEFN
  [LAMBDA (HOW NODE GRAPH WINDOW)                            (* rrb " 6-NOV-83 12:08")
                                                             (* the node deleting function for a sketch graph.)
    (PROG (NEWFONT ORIGNODE)
          [SETQ NEWFONT (NEXTSIZEFONT HOW (fetch (GRAPHNODE NODEFONT)
					     of (SETQ ORIGNODE (ORIG.NODE.OF.GRAPH
						    NODE GRAPH (WINDOWPROP WINDOW (QUOTE SKETCH.GRAPH]
          (COND
	    (NEWFONT (replace (GRAPHNODE NODEFONT) of ORIGNODE with NEWFONT])

(ZOOM.GRAPH.MOVENODEFN
  [LAMBDA (NODE NEWPOS GRAPH WINDOW)                         (* rrb " 6-NOV-83 12:08")
                                                             (* the move function for a sketch graph.
							     Moves the original node and calls its move fn if any.)
    (PROG [(ORGGRAPH (WINDOWPROP WINDOW (QUOTE SKETCH.GRAPH)))
	   (SCALE (WINDOWPROP WINDOW (QUOTE SCALE]
          (GRAPHMOVENODE (ORIG.NODE.OF.GRAPH NODE GRAPH ORGGRAPH)
			 (UNSCALE.POSITION NEWPOS SCALE)
			 ORGGRAPH WINDOW])

(SHOWZOOMGRAPH
  [LAMBDA (GRAPH WINDOW LEFTBUTTONFN MIDDLEBUTTONFN TOPJUSTIFYFLG ALLOWEDITFLG INITSCALE)
                                                             (* edited: "14-Feb-84 13:30")
                                                             (* puts a zoomable graph in the given window, creating 
							     one if a window is not given.)
    (PROG (SKETCH.GRAPH (INITSCALE (OR INITSCALE 1.0)))
          (COND
	    ((LISTP GRAPH)                                   (* should be a GRAPHP check but since it is a list there
							     is no easy test.)
	      NIL)
	    ((NULL GRAPH)
	      (SETQ GRAPH (create GRAPH)))
	    (T (\ILLEGAL.ARG GRAPH)))
          (SETQ SKETCH.GRAPH (MAKE.ZOOM.GRAPH GRAPH INITSCALE))
                                                             (* put a title on so that there will be a place to right
							     button.)
          (SETQ WINDOW (SIZE/GRAPH/WINDOW SKETCH.GRAPH (OR WINDOW (AND ALLOWEDITFLG ""))
					  TOPJUSTIFYFLG))
          (bind MENU for ATW in (ATTACHEDWINDOWS WINDOW) when (AND (SETQ MENU (WINDOWPROP
								       ATW
								       (QUOTE MENU)))
								   (EQ (fetch (MENU WHENSELECTEDFN)
									  of (CAR MENU))
								       (FUNCTION ZOOM.GRAPH.WINDOW)))
	     do                                              (* a zoom menu is already attached to this window.)
		(RETURN)
	     finally (ATTACHMENU (create MENU
					 ITEMS ←(QUOTE ((LARGER (QUOTE IN)
								
						      "increases the size of the graph elements.")
							 (smaller (QUOTE OUT)
								  
						       "decreases the size of the graph elements")))
					 CENTERFLG ← T
					 WHENSELECTEDFN ←(FUNCTION ZOOM.GRAPH.WINDOW)
					 MENUROWS ← 1
					 MENUBORDERSIZE ← 1)
				 WINDOW
				 (QUOTE TOP)))
          (WINDOWPROP WINDOW (QUOTE SKETCH.GRAPH)
		      GRAPH)
          (WINDOWPROP WINDOW (QUOTE SCALE)
		      INITSCALE)
          (WINDOWPROP WINDOW (QUOTE GRAPH)
		      SKETCH.GRAPH)
          (WINDOWADDPROP WINDOW (QUOTE REPAINTFN)
			 (FUNCTION REDISPLAYGRAPH))
          (WINDOWADDPROP WINDOW (QUOTE RESHAPEFN)
			 (FUNCTION RESHAPEBYREPAINTFN))
          (WINDOWPROP WINDOW (QUOTE SCROLLFN)
		      (FUNCTION SCROLLBYREPAINTFN))
          [COND
	    (ALLOWEDITFLG                                    (* change the mode to invert so lines can be erased by 
							     being redrawn.)
			  (DSPOPERATION (QUOTE INVERT)
					WINDOW)
			  (WINDOWPROP WINDOW (QUOTE RIGHTBUTTONFN)
				      (FUNCTION GRAPHEDITEVENTFN]
          (WINDOWPROP WINDOW (QUOTE BUTTONEVENTFN)
		      (FUNCTION APPLYTOSELECTEDNODE))
          (WINDOWPROP WINDOW (QUOTE BROWSER/LEFTFN)
		      LEFTBUTTONFN)
          (WINDOWPROP WINDOW (QUOTE BROWSER/MIDDLEFN)
		      MIDDLEBUTTONFN)
          (OPENW WINDOW)
          (REDISPLAYGRAPH WINDOW)
          (RETURN WINDOW])

(ZOOM.TO.CENTER
  [LAMBDA (WINDOW FACTOR)                                    (* rrb " 6-NOV-83 11:46")
                                                             (* adjusts the SCALE window property and the offsets of 
							     WINDOW so that they correspond to zooming by FACTOR 
							     towards the center.)
    (PROG ((OLDSCALE (WINDOW.SCALE WINDOW))
	   (REG (DSPCLIPPINGREGION NIL WINDOW))
	   NEWSCALE)
          (WINDOWPROP WINDOW (QUOTE SCALE)
		      (SETQ NEWSCALE (FTIMES OLDSCALE FACTOR)))
          (ABSWXOFFSET (FIX (FQUOTIENT [FTIMES OLDSCALE (FPLUS (fetch (REGION LEFT) of REG)
							       (FTIMES (fetch (REGION WIDTH)
									  of REG)
								       (FQUOTIENT (FDIFFERENCE 1.0 
											   FACTOR)
										  2]
				       NEWSCALE))
		       WINDOW)
          (ABSWYOFFSET (FIX (FQUOTIENT [FTIMES OLDSCALE (FPLUS (fetch (REGION BOTTOM) of REG)
							       (FTIMES (fetch (REGION HEIGHT)
									  of REG)
								       (FQUOTIENT (FDIFFERENCE 1.0 
											   FACTOR)
										  2]
				       NEWSCALE))
		       WINDOW)                               (* scale the EXTENT also.)
          (AND (SETQ REG (WINDOWPROP WINDOW (QUOTE EXTENT)))
	       (WINDOWPROP WINDOW (QUOTE EXTENT)
			   (SCALE.REGION REG FACTOR])
)



(* general functions for scaling)

(DEFINEQ

(ABSWXOFFSET
  [LAMBDA (NEWX W)                                           (* rrb "29-MAR-83 11:27")
                                                             (* sets the offset of a window.)
    (WXOFFSET (IDIFFERENCE (WXOFFSET NIL W)
			   NEWX)
	      W])

(ABSWYOFFSET
  [LAMBDA (NEWY W)                                           (* rrb "29-MAR-83 11:28")
                                                             (* sets the offset of a window.)
    (WYOFFSET (IDIFFERENCE (WYOFFSET NIL W)
			   NEWY)
	      W])

(SCALE.REGION
  [LAMBDA (REGION SCALE)                                     (* rrb "15-AUG-83 17:30")
                                                             (* scales a region into a windows coordinate space.)
    (CREATEREGION (FIXR (QUOTIENT (fetch (REGION LEFT) of REGION)
				  SCALE))
		  (FIXR (QUOTIENT (fetch (REGION BOTTOM) of REGION)
				  SCALE))
		  (FIXR (QUOTIENT (fetch (REGION WIDTH) of REGION)
				  SCALE))
		  (FIXR (QUOTIENT (fetch (REGION HEIGHT) of REGION)
				  SCALE])

(UNSCALE.POSITION
  [LAMBDA (POSITION SCALE)                                   (* rrb " 1-APR-83 16:05")
                                                             (* unscales a point in a window out into the larger 
							     coordinate space.)
    (create POSITION
	    XCOORD ←(TIMES (fetch (POSITION XCOORD) of POSITION)
			   SCALE)
	    YCOORD ←(TIMES (fetch (POSITION YCOORD) of POSITION)
			   SCALE])

(SCALE.POSITION
  [LAMBDA (POS SCALE)                                        (* rrb "29-APR-83 08:27")
                                                             (* scales a position from window coordinates into global
							     coordinates.)
    (create POSITION
	    XCOORD ←(QUOTIENT (fetch (POSITION XCOORD) of POS)
			      SCALE)
	    YCOORD ←(QUOTIENT (fetch (POSITION YCOORD) of POS)
			      SCALE])

(WINDOW.SCALE
  [LAMBDA (SKETCHW)                                          (* rrb "14-MAR-83 10:31")
                                                             (* returns the scale of a sketch window.)
    (WINDOWPROP SKETCHW (QUOTE SCALE])
)
(DEFINEQ

(PRESS.DECREASING.FONT.LIST
  [LAMBDA NIL                                                (* rrb "10-Jun-85 14:35")
                                                             (* calculates, caches, and returns a list of the font 
							     descriptors for the fonts sketch windows are willing to
							     print in.)
    (OR (LISTP PRESS.DECREASING.FONT.LIST)
	(PROG (FONT)
	      (RETURN (SETQ PRESS.DECREASING.FONT.LIST
			(APPEND (AND (SETQ FONT (FONTCREATE (QUOTE HELVETICA)
							    36 NIL NIL NIL T))
				     (CONS FONT))
				(AND (SETQ FONT (FONTCREATE (QUOTE HELVETICAD)
							    24 NIL NIL NIL T))
				     (CONS FONT))
				(for SIZE in (QUOTE (18 14 12 10 8 5 4 3))
				   when (SETQ FONT (FONTCREATE (QUOTE HELVETICA)
							       SIZE NIL NIL NIL T))
				   collect FONT])

(IP.DECREASING.FONT.LIST
  [LAMBDA NIL                                                (* rrb " 8-Jun-85 10:22")

          (* * calculates, caches, returns a list of the font descriptors for the fonts sketch windows are willing to print 
	  in.)

                                                             (* this is calculated upon demand so that loading 
							     doesn't need fonts.)
    (OR (LISTP IP.DECREASING.FONT.LIST)
	(SETQ IP.DECREASING.FONT.LIST (bind FONT for SIZE
					 in (QUOTE (36 30 24 18 14 12 10 8 6))
					 when (SETQ FONT (FONTCREATE (QUOTE MODERN)
								     SIZE NIL NIL NIL T))
					 join (CONS FONT])
)
(DECLARE: DOEVAL@COMPILE DONTCOPY

(GLOBALVARS PRESS.DECREASING.FONT.LIST IP.DECREASING.FONT.LIST)
)

(RPAQ? PRESS.DECREASING.FONT.LIST NIL)

(RPAQ? IP.DECREASING.FONT.LIST NIL)
(PUTPROPS GRAPHZOOM COPYRIGHT ("Xerox Corporation" 1983 1984 1985))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (1333 15781 (MAKE.ZOOM.GRAPH 1343 . 2159) (ORIG.NODE.OF.GRAPH 2161 . 2768) (
SCALE.GRAPH.FONT 2770 . 3270) (SCALE.GRAPH.NODE 3272 . 4206) (SCALE.GRAPH.NODES 4208 . 4493) (
SCALE.GRAPH 4495 . 5045) (RESET.GRAPH.EXTENT 5047 . 5278) (ZOOM.GRAPH.WINDOW 5280 . 6437) (
ADJUST.EXTENT 6439 . 8617) (ZOOM.GRAPH.ADDLINKFN 8619 . 9054) (ZOOM.GRAPH.ADDNODEFN 9056 . 9616) (
ZOOM.GRAPH.DELETELINKFN 9618 . 10065) (ZOOM.GRAPH.DELETENODEFN 10067 . 10468) (ZOOM.GRAPH.FONTCHANGEFN
 10470 . 11024) (ZOOM.GRAPH.MOVENODEFN 11026 . 11559) (SHOWZOOMGRAPH 11561 . 14449) (ZOOM.TO.CENTER 
14451 . 15779)) (15824 18082 (ABSWXOFFSET 15834 . 16106) (ABSWYOFFSET 16108 . 16380) (SCALE.REGION 
16382 . 16923) (UNSCALE.POSITION 16925 . 17374) (SCALE.POSITION 17376 . 17824) (WINDOW.SCALE 17826 . 
18080)) (18083 19717 (PRESS.DECREASING.FONT.LIST 18093 . 19004) (IP.DECREASING.FONT.LIST 19006 . 19715
)))))
STOP