(FILECREATED "25-Nov-85 12:53:22" {QV}<PEDERSEN>LISP>TWODINSPECTOR.;20 103435 

      changes to:  (FNS TWODINSPECT.BUTTONEVENTFN ONEDINSPECT.BUTTONEVENTFN 
			ONEDINSPECT.RIGHTW.BUTTONEVENTFN TWODINSPECT.RIGHTW.BUTTONEVENTFN 
			TWODINSPECT.TOPW.BUTTONEVENTFN)
		   (RECORDS ICMLARRAY.ACTIVEREGION ONEDINSPECT.SELECTION TWODINSPECT.SELECTION)

      previous date: "20-Nov-85 20:25:43" {QV}<PEDERSEN>LISP>TWODINSPECTOR.;19)


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

(PRETTYCOMPRINT TWODINSPECTORCOMS)

(RPAQQ TWODINSPECTORCOMS ((FNS ONEDINSPECT.PROPWIDTH ONEDINSPECT.REDISPLAY ONEDINSPECT.VALUEWIDTH 
				 ONEDINSPECT.ADJUSTPROPSELECTION ONEDINSPECT.ADJUSTSELECTION 
				 ONEDINSPECT.ARRANGEWINDOWS ONEDINSPECT.BUTTONEVENTFN 
				 ONEDINSPECT.CLOSEFN ONEDINSPECT.DEFAULT.TITLECOMMANDFN 
				 ONEDINSPECT.DEFAULT.VALUECOMMANDFN ONEDINSPECT.INVERTSELECTION 
				 ONEDINSPECT.MAKEREGIONS ONEDINSPECT.PRINTELEMENT 
				 ONEDINSPECT.REPAINTFN ONEDINSPECT.REPLACE ONEDINSPECT.RESHAPEFN 
				 ONEDINSPECT.RIGHTW.BUTTONEVENTFN ONEDINSPECT.RIGHTW.REPAINTFN 
				 ONEDINSPECT.RIGHTW.RESHAPEFN ONEDINSPECT.SCROLLFN 
				 ONEDINSPECT.SELECTITEM ONEDINSPECT.SELECTPROP ONEDINSPECT.SETELT 
				 ONEDINSPECTW.CREATE TWODINSPECT.COLUMNWIDTH TWODINSPECT.COLUMNWIDTHS 
				 TWODINSPECT.CLOSEFN TWODINSPECT.ARRANGEWINDOWS TWODINSPECTW.CREATE 
				 TITLEW.BUTTONEVENTFN TWODINSPECT.DEFAULT.TITLECOMMANDFN 
				 TITLEW.REPAINTFN TWODINSPECT.INVERTREGION TWODINSPECT.BUTTONEVENTFN 
				 TWODINSPECT.DEFAULT.VALUECOMMANDFN TWODINSPECT.DOWINDOWCOMFN 
				 TWODINSPECT.MAKEREGIONS TWODINSPECT.PRINTELEMENT 
				 TWODINSPECT.REDISPLAY TWODINSPECT.INVERTSELECTION 
				 TWODINSPECT.ADJUSTCOLUMNSELECTION TWODINSPECT.ADJUSTROWSELECTION 
				 TWODINSPECT.ADJUSTSELECTION TWODINSPECT.REPAINTFN 
				 TWODINSPECT.RESHAPEFN TWODINSPECT.ROWPROPWIDTH TWODINSPECT.SCROLLFN 
				 TWODINSPECT.SELECTCOLUMNPROP TWODINSPECT.SELECTITEM 
				 TWODINSPECT.SELECTROWPROP TWODINSPECT.SETELT TWODINSPECT.REPLACE 
				 TWODINSPECT.RIGHTW.BUTTONEVENTFN TWODINSPECT.RIGHTW.REPAINTFN 
				 TWODINSPECT.RIGHTW.RESHAPEFN TWODINSPECT.TOPW.BUTTONEVENTFN 
				 TWODINSPECT.TOPW.REPAINTFN TWODINSPECT.TOPW.RESHAPEFN 
				 TWODINSPECT.TOTALWIDTH LISTNCHARS LISTSTRREGION LISTSTRWIDTH 
				 PLNCHARS PLSTRINGREGION PLSTRINGWIDTH)
	(INITVARS INSPECTORFONT)
	(GLOBALVARS INSPECTORFONT)
	(INITRECORDS ICMLARRAY.ACTIVEREGION ONEDINSPECT.SELECTION TWODINSPECT.SELECTION)
	(DECLARE: DOEVAL@COMPILE DONTCOPY (RECORDS ICMLARRAY.ACTIVEREGION ONEDINSPECT.SELECTION 
						   TWODINSPECT.SELECTION))
	(DECLARE: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (LOCALVARS . T))))
(DEFINEQ

(ONEDINSPECT.PROPWIDTH
  [LAMBDA (PROPS FONT)                                       (* jop: " 1-Oct-85 22:02")

          (* * Computes the MIN fieldwidth for the COLUMNPROP column of SLICE)


    (RESETLST [RESETSAVE (PRINTLEVEL (QUOTE (2 . 5]
	      (RESETSAVE *PRINT-ARRAY* NIL)
	      (PLSTRINGWIDTH (for PROP in PROPS largest (PLSTRINGWIDTH PROP FONT))
			     FONT])

(ONEDINSPECT.REDISPLAY
  [LAMBDA (WINDOW ELTPROPS)                                  (* jop: "31-Dec-00 19:45")

          (* * ELTPROPS may be a single entries, a list, or NIL. If NIL than the whole inspector is refetched and 
	  redisplayed)


    (if (AND ELTPROPS (NLISTP ELTPROPS))
	then (SETQ ELTPROPS (LIST ELTPROPS)))
    (RESETLST [RESETSAVE (PRINTLEVEL (QUOTE (2 . 5]
		(RESETSAVE PLVLFILEFLG T)
		(RESETSAVE *PRINT-ARRAY* NIL)
		(PROG ((FETCHFN (WINDOWPROP WINDOW (QUOTE FETCHFN)))
			 (DATUM (WINDOWPROP WINDOW (QUOTE DATUM)))
			 (VERTMARKS (WINDOWPROP WINDOW (QUOTE VERTMARKS)))
			 (PROPS (WINDOWPROP WINDOW (QUOTE PROPS)))
			 (VALUEWIDTH (WINDOWPROP WINDOW (QUOTE VALUEWIDTH)))
			 (SELECTION (WINDOWPROP WINDOW (QUOTE SELECTION)))
			 ELTWIDTHS ELTS ELTBOTTOMS)
		        (SETQ ELTS (for PROP in ELTPROPS collect (APPLY* FETCHFN DATUM PROP)
					    ))
		        (SETQ ELTWIDTHS (for ELT in ELTS collect (PLSTRINGWIDTH ELT WINDOW))
			  )
		        [SETQ ELTBOTTOMS (for ELTPROP in ELTPROPS
					      collect (for VMARK in VERTMARKS as PROP
							   in PROPS thereis (EQUAL PROP ELTPROP]
		        (if (AND ELTS (for ELTWIDTH in ELTWIDTHS never (IGREATERP 
											 ELTWIDTH 
										       VALUEWIDTH)))
			    then (ONEDINSPECT.INVERTSELECTION WINDOW)
				   (bind (FHEIGHT ←(FONTPROP WINDOW (QUOTE HEIGHT)))
					   (FDESCENT ←(FONTPROP WINDOW (QUOTE DESCENT)))
				      for ELT in ELTS as BOTTOM in ELTBOTTOMS
				      do (BITBLT NIL NIL NIL WINDOW 0 BOTTOM VALUEWIDTH FHEIGHT
						     (QUOTE TEXTURE)
						     (QUOTE REPLACE)
						     WHITESHADE)
					   (ONEDINSPECT.PRINTELEMENT ELT BOTTOM FDESCENT WINDOW))
				   (ONEDINSPECT.ADJUSTSELECTION WINDOW)
				   (ONEDINSPECT.INVERTSELECTION WINDOW)
			  else                             (* Recompute the whole picture)
				 (WINDOWPROP WINDOW (QUOTE VALUEWIDTH)
					       NIL)
				 (ONEDINSPECT.MAKEREGIONS WINDOW)
				 (ONEDINSPECT.ADJUSTSELECTION WINDOW)
				 (DSPRESET WINDOW)
				 (ONEDINSPECT.REPAINTFN WINDOW)
				 (DSPRESET (WINDOWPROP WINDOW (QUOTE RIGHTWINDOW)))
				 (ONEDINSPECT.RIGHTW.REPAINTFN (WINDOWPROP WINDOW (QUOTE 
										      RIGHTWINDOW])

(ONEDINSPECT.VALUEWIDTH
  [LAMBDA (DATUM PROPS FETCHFN FONT)                         (* jop: " 2-Oct-85 00:04")

          (* * Computes the MIN fieldwidth for the COLUMNPROP column of SLICE)


    (RESETLST [RESETSAVE (PRINTLEVEL (QUOTE (2 . 5]
	      (RESETSAVE *PRINT-ARRAY* NIL)
	      (PLSTRINGWIDTH (APPLY* FETCHFN DATUM (for PROP in PROPS
						      largest (PLSTRINGWIDTH (APPLY* FETCHFN DATUM 
										     PROP)
									     FONT)))
			     FONT])

(ONEDINSPECT.ADJUSTPROPSELECTION
  [LAMBDA (WINDOW)                                           (* jop: " 1-Oct-85 23:32")
    (PROG ((SELECTION (WINDOWPROP WINDOW (QUOTE SELECTION)))
	   (MAINWINDOW (MAINWINDOW WINDOW)))
          (if SELECTION
	      then (RESETLST [RESETSAVE (PRINTLEVEL (QUOTE (2 . 5]
			     (RESETSAVE *PRINT-ARRAY* NIL)
			     (PROG ((PROPSPACE (WINDOWPROP MAINWINDOW (QUOTE PROPSPACE)))
				    (PROPS (WINDOWPROP MAINWINDOW (QUOTE PROPS)))
				    (VERTMARKS (WINDOWPROP MAINWINDOW (QUOTE VERTMARKS)))
				    (SELPROP (fetch (ONEDINSPECT.SELECTION PROP) of SELECTION))
				    SELBOTTOM SELWIDTH SELLEFT)
			           (SETQ SELBOTTOM (for VMARK in VERTMARKS as PROP on PROPS
						      thereis (EQ PROP SELPROP)))
			           (SETQ SELWIDTH (PLSTRINGWIDTH (CAR SELPROP)
								 WINDOW))
			           (SETQ SELLEFT (STRINGWIDTH PROPSPACE WINDOW))
			           (WINDOWPROP WINDOW (QUOTE SELECTION)
					       (create ONEDINSPECT.SELECTION
						       PROP ← SELPROP
						       ELTBOTTOM ← SELBOTTOM
						       ELTWIDTH ← SELWIDTH
						       ELTLEFT ← SELLEFT])

(ONEDINSPECT.ADJUSTSELECTION
  [LAMBDA (WINDOW)                                           (* jop: " 2-Oct-85 00:10")
    (PROG [(SELECTION (WINDOWPROP WINDOW (QUOTE SELECTION]
          (COND
	    (SELECTION (RESETLST [RESETSAVE (PRINTLEVEL (QUOTE (2 . 5]
				 (RESETSAVE *PRINT-ARRAY* NIL)
				 (PROG ((DATUM (WINDOWPROP WINDOW (QUOTE DATUM)))
					(FETCHFN (WINDOWPROP WINDOW (QUOTE FETCHFN)))
					(PROPS (WINDOWPROP WINDOW (QUOTE PROPS)))
					(VERTMARKS (WINDOWPROP WINDOW (QUOTE VERTMARKS)))
					(SELPROP (fetch (ONEDINSPECT.SELECTION PROP) of SELECTION)))
				       (WINDOWPROP WINDOW (QUOTE SELECTION)
						   (create ONEDINSPECT.SELECTION
							   PROP ← SELPROP
							   ELTBOTTOM ←(for VMARK in VERTMARKS
									 as PROP on PROPS
									 thereis (EQ PROP SELPROP))
							   ELTWIDTH ←(PLSTRINGWIDTH
							     (APPLY* FETCHFN DATUM (CAR SELPROP))
							     WINDOW)
							   ELTLEFT ← 0])

(ONEDINSPECT.ARRANGEWINDOWS
  [LAMBDA (DISPLAYWINDOW RIGHTWINDOW TITLEWINDOW TOTALLEFT TOTALBOTTOM TOTALWIDTH TOTALHEIGHT 
			 TOPRIGHT)                           (* jop: " 6-Oct-85 13:39")

          (* * REGION should be the total available area)


    (PROG ((PROPS (WINDOWPROP DISPLAYWINDOW (QUOTE PROPS)))
	     (PROPWIDTH (WINDOWPROP DISPLAYWINDOW (QUOTE PROPWIDTH)))
	     (PROPSPACE (WINDOWPROP DISPLAYWINDOW (QUOTE PROPSPACE)))
	     (VALUEWIDTH (WINDOWPROP DISPLAYWINDOW (QUOTE VALUEWIDTH)))
	     (VALUESPACE (WINDOWPROP DISPLAYWINDOW (QUOTE VALUESPACE)))
	     TOTALRIGHT TOTALTOP DWHEIGHT DWWIDTH TITLEHEIGHT RWWIDTH DWLEFT DWBOTTOM)
	    [SETQ TITLEHEIGHT (HEIGHTIFWINDOW (FONTPROP TITLEWINDOW (QUOTE HEIGHT))
						  NIL
						  (WINDOWPROP TITLEWINDOW (QUOTE BORDER]
	    [SETQ RWWIDTH (WIDTHIFWINDOW (IPLUS (STRINGWIDTH PROPSPACE RIGHTWINDOW)
						      PROPWIDTH)
					     (WINDOWPROP RIGHTWINDOW (QUOTE BORDER]
	    (if (NULL TOTALHEIGHT)
		then [SETQ DWHEIGHT (IMIN 500 (HEIGHTIFWINDOW (ITIMES (FONTPROP
										  DISPLAYWINDOW
										  (QUOTE HEIGHT))
										(LENGTH PROPS))
								      NIL
								      (WINDOWPROP DISPLAYWINDOW
										    (QUOTE BORDER]
		       (SETQ TOTALHEIGHT (IPLUS TITLEHEIGHT DWHEIGHT))
	      else (SETQ DWHEIGHT (IDIFFERENCE TOTALHEIGHT TITLEHEIGHT)))
	    (if (NULL TOTALWIDTH)
		then [SETQ DWWIDTH (IMIN 200 (WIDTHIFWINDOW (IPLUS VALUEWIDTH
									     (STRINGWIDTH 
										       VALUESPACE 
										    DISPLAYWINDOW))
								    (WINDOWPROP DISPLAYWINDOW
										  (QUOTE BORDER]
		       (SETQ TOTALWIDTH (IPLUS RWWIDTH DWWIDTH))
	      else (SETQ DWWIDTH (IDIFFERENCE TOTALWIDTH RWWIDTH)))
	    [if (POSITIONP TOPRIGHT)
		then (SETQ TOTALRIGHT (fetch XCOORD of TOPRIGHT))
		       (SETQ TOTALTOP (fetch YCOORD of TOPRIGHT))
	      elseif (AND TOTALLEFT TOTALBOTTOM)
		then (SETQ TOTALRIGHT (IPLUS TOTALLEFT (SUB1 TOTALWIDTH)))
		       (SETQ TOTALTOP (IPLUS TOTALBOTTOM (SUB1 TOTALHEIGHT)))
	      else (LET ((REGION (GETBOXREGION TOTALWIDTH TOTALHEIGHT NIL NIL NIL 
						   "Position Inspector window")))
		          (SETQ TOTALTOP (fetch TOP of REGION))
		          (SETQ TOTALRIGHT (fetch RIGHT of REGION]
	    [SETQ DWLEFT (DIFFERENCE TOTALRIGHT (SUB1 (PLUS DWWIDTH RWWIDTH]
	    (if (ILESSP DWLEFT 0)
		then (SETQ DWLEFT 0)
		       (SETQ DWWIDTH (DIFFERENCE (ADD1 TOTALRIGHT)
						     RWWIDTH)))
	    [SETQ DWBOTTOM (DIFFERENCE TOTALTOP (SUB1 (PLUS DWHEIGHT TITLEHEIGHT]
	    (if (LESSP DWBOTTOM 0)
		then (SETQ DWBOTTOM 0)
		       (SETQ DWHEIGHT (DIFFERENCE (ADD1 TOTALTOP)
						      TITLEHEIGHT)))

          (* * put up the window group)


	    (WINDOWPROP DISPLAYWINDOW (QUOTE MINSIZE)
			  (CONS 0 0))
	    (SHAPEW DISPLAYWINDOW (CREATEREGION DWLEFT DWBOTTOM DWWIDTH DWHEIGHT))
                                                             (* Need to set the Minsize BEFORE reshaping else we 
							     catch the default minsize)
	    (WINDOWPROP RIGHTWINDOW (QUOTE MINSIZE)
			  (CONS RWWIDTH 0))
	    (WINDOWPROP RIGHTWINDOW (QUOTE MAXSIZE)
			  (CONS RWWIDTH MAX.SMALLP))
	    (SHAPEW RIGHTWINDOW (CREATEREGION [ADD1 (fetch RIGHT of (WINDOWPROP
										DISPLAYWINDOW
										(QUOTE REGION]
						  DWBOTTOM RWWIDTH DWHEIGHT))
	    (ATTACHWINDOW RIGHTWINDOW DISPLAYWINDOW (QUOTE RIGHT))
	    (WINDOWPROP TITLEWINDOW (QUOTE MINSIZE)
			  (CONS 0 TITLEHEIGHT))
	    (WINDOWPROP TITLEWINDOW (QUOTE MAXSIZE)
			  (CONS MAX.SMALLP TITLEHEIGHT))
	    (SHAPEW TITLEWINDOW (CREATEREGION DWLEFT [ADD1 (fetch TOP (WINDOWPROP
									    DISPLAYWINDOW
									    (QUOTE REGION]
						  TOTALWIDTH TITLEHEIGHT))
	    (ATTACHWINDOW TITLEWINDOW DISPLAYWINDOW (QUOTE TOP))
	    (RETURN DISPLAYWINDOW])

(ONEDINSPECT.BUTTONEVENTFN
  [LAMBDA (WINDOW)                                           (* jop: "25-Nov-85 12:45")

          (* *)


    (TOTOPW WINDOW)
    (PROG ((DATUM (WINDOWPROP WINDOW (QUOTE DATUM)))
	     (FETCHFN (WINDOWPROP WINDOW (QUOTE FETCHFN)))
	     (PROPS (WINDOWPROP WINDOW (QUOTE PROPS)))
	     (VERTMARKS (WINDOWPROP WINDOW (QUOTE VERTMARKS)))
	     (SELECTION (WINDOWPROP WINDOW (QUOTE SELECTION)))
	     SELECTEDPROP SELECTEDELTBOTTOM SELECTEDELTLEFT SELECTEDELTWIDTH)
	    (if SELECTION
		then (SETQ SELECTEDPROP (fetch (ONEDINSPECT.SELECTION PROP) of SELECTION))
		       (SETQ SELECTEDELTBOTTOM (fetch (ONEDINSPECT.SELECTION ELTBOTTOM)
						    of SELECTION))
		       (SETQ SELECTEDELTLEFT (fetch (ONEDINSPECT.SELECTION ELTLEFT) of 
											SELECTION))
		       (SETQ SELECTEDELTWIDTH (fetch (ONEDINSPECT.SELECTION ELTWIDTH)
						   of SELECTION)))
	    (if (MOUSESTATE LEFT)
		then [RESETLST [RESETSAVE (PRINTLEVEL (QUOTE (2 . 5]
				   (RESETSAVE *PRINT-ARRAY* NIL)
				   (bind (FHEIGHT ←(FONTPROP WINDOW (QUOTE HEIGHT)))
					   CURSOR NEWPROP NEWVERTMARK NEWELTWIDTH
				      repeatwhile (MOUSESTATE LEFT)
				      do (SETQ CURSOR (CURSORPOSITION NIL WINDOW))
					   (bind (Y ←(fetch YCOORD of CURSOR)) for PROP
					      on PROPS as VERTMARK in VERTMARKS
					      until (ILESSP VERTMARK Y)
					      finally (SETQ NEWPROP PROP)
							(SETQ NEWVERTMARK VERTMARK))
					   (if NEWPROP
					       then (SETQ NEWELTWIDTH (PLSTRINGWIDTH
							  (APPLY* FETCHFN DATUM (CAR NEWPROP))
							  WINDOW))
                                                             (* Select the new region only if the cursor is inside 
							     the element box)
						      (if (IGREATERP (fetch XCOORD
									    of CURSOR)
									 NEWELTWIDTH)
							  then (SETQ NEWPROP NIL)))
					   (if (NEQ NEWPROP SELECTEDPROP)
					       then        (* We need to consider highlighting a new region)
						      (if SELECTEDPROP
							  then 
                                                             (* Lowlight the old region)
								 (TWODINSPECT.INVERTREGION 
										  SELECTEDELTLEFT 
										SELECTEDELTBOTTOM 
										 SELECTEDELTWIDTH 
											  FHEIGHT 
											   WINDOW)
								 (SETQ SELECTEDPROP NIL))
						      (if NEWPROP
							  then 
                                                             (* cursor inside element box, highlight that box)
								 (TWODINSPECT.INVERTREGION 0 
										      NEWVERTMARK 
										      NEWELTWIDTH 
											  FHEIGHT 
											   WINDOW)
								 (SETQ SELECTEDPROP NEWPROP)
								 (SETQ SELECTEDELTWIDTH NEWELTWIDTH)
								 (SETQ SELECTEDELTLEFT 0)
								 (SETQ SELECTEDELTBOTTOM 
								   NEWVERTMARK)))
				      finally (if SELECTEDPROP
						    then (WINDOWPROP WINDOW (QUOTE SELECTION)
									 (create 
									    ONEDINSPECT.SELECTION
										   PROP ← 
										   SELECTEDPROP
										   ELTWIDTH ← 
										 SELECTEDELTWIDTH
										   ELTLEFT ← 
										  SELECTEDELTLEFT
										   ELTBOTTOM ← 
										SELECTEDELTBOTTOM))
						  else (WINDOWPROP WINDOW (QUOTE SELECTION)
								       NIL]
	      else                                         (* MOUSESTATE MIDDLE)
		     (if SELECTION
			 then (APPLY* (WINDOWPROP WINDOW (QUOTE VALUECOMMANDFN))
					  (APPLY* FETCHFN DATUM (CAR SELECTEDPROP))
					  (CAR SELECTEDPROP)
					  DATUM WINDOW])

(ONEDINSPECT.CLOSEFN
  [LAMBDA (WINDOW)                                           (* jop: " 4-Oct-85 17:52")
    (DETACHALLWINDOWS WINDOW)
    (WINDOWPROP WINDOW (QUOTE SELECTION)
		  NIL)
    (WINDOWPROP (WINDOWPROP WINDOW (QUOTE RIGHTWINDOW))
		  (QUOTE SELECTION)
		  NIL])

(ONEDINSPECT.DEFAULT.TITLECOMMANDFN
  [LAMBDA (WINDOW)                                           (* jop: " 1-Oct-85 23:19")

          (* *)


    (if (MOUSESTATE MIDDLE)
	then (RESETLST [RESETSAVE (PRINTLEVEL (QUOTE (2 . 5]
		       (RESETSAVE PLVLFILEFLG T)
		       (RESETSAVE *PRINT-ARRAY* NIL)
		       (PROG [[TITLEMENU (CONSTANT (create MENU
							   ITEMS ←(QUOTE ((Refetch (QUOTE REFETCH)
										   
									      "Refetch the datum")
									   ("IT ← Datum"
									     (QUOTE IT)
									     
								 "Bind IT to the inspected datum"]
			      (DATUM (WINDOWPROP WINDOW (QUOTE DATUM]
			     (SELECTQ (MENU TITLEMENU)
				      (REFETCH (ONEDINSPECT.REDISPLAY WINDOW))
				      (IT (SETQ IT DATUM)
					  (PROMPTPRINT "IT bound to " DATUM))
				      NIL])

(ONEDINSPECT.DEFAULT.VALUECOMMANDFN
  [LAMBDA (VALUE PROP DATUM WINDOW)                          (* jop: "10-Oct-85 20:46")

          (* *)


    (PROG [[SETMENU (CONSTANT (create MENU
					    ITEMS ←(QUOTE (("IT ← Selection" (QUOTE IT)
									       
						     "Bind IT to the value of the selected entry")
							      (Set (QUOTE SET)
								   "Set the selected entry"]
	     (INSPECTMENU (CONSTANT (create MENU
						ITEMS ←(QUOTE ((Inspect (QUOTE INSPECT)
									  
							"Inspect the value of the selected entry")
								  ("IT ← Selection" (QUOTE IT)
										    
						     "Bind IT to the value of the selected entry")
								  (Set (QUOTE SET)
								       "Set the selected entry"]
	    (SELECTQ (if (OR (NULL VALUE)
				   (NUMBERP VALUE))
			   then (MENU SETMENU)
			 else (MENU INSPECTMENU))
		       (INSPECT (INSPECT VALUE))
		       (IT (SETQ IT VALUE)
			   (RESETLST [RESETSAVE (PRINTLEVEL (QUOTE (2 . 5]
				       (RESETSAVE PLVLFILEFLG T)
				       (RESETSAVE *PRINT-ARRAY* NIL)
				       (PROMPTPRINT "IT bound to " IT)))
		       (SET (ONEDINSPECT.SETELT PROP WINDOW))
		       NIL])

(ONEDINSPECT.INVERTSELECTION
  [LAMBDA (WINDOW)                                           (* jop: " 1-Oct-85 22:57")

          (* * Inverts SELECTION if non-NIL)


    (PROG [(SELECTION (WINDOWPROP WINDOW (QUOTE SELECTION]
          (if SELECTION
	      then (TWODINSPECT.INVERTREGION (fetch (ONEDINSPECT.SELECTION ELTLEFT) of SELECTION)
					     (fetch (ONEDINSPECT.SELECTION ELTBOTTOM) of SELECTION)
					     (fetch (ONEDINSPECT.SELECTION ELTWIDTH) of SELECTION)
					     (FONTPROP WINDOW (QUOTE HEIGHT))
					     WINDOW])

(ONEDINSPECT.MAKEREGIONS
  [LAMBDA (WINDOW)                                           (* jop: " 6-Oct-85 16:34")

          (* * Sets up windowprops and activeregions)


    (PROG ((PROPS (WINDOWPROP WINDOW (QUOTE PROPS)))
	     (VALUEWIDTH (WINDOWPROP WINDOW (QUOTE VALUEWIDTH)))
	     (VALUESPACE (WINDOWPROP WINDOW (QUOTE VALUESPACE)))
	     (WINDOWHEIGHT (WINDOWPROP WINDOW (QUOTE HEIGHT)))
	     (LF (DSPLINEFEED NIL WINDOW))
	     VERTMARKS)
	    (if (NULL VALUEWIDTH)
		then (SETQ VALUEWIDTH (ONEDINSPECT.VALUEWIDTH (WINDOWPROP WINDOW
										  (QUOTE DATUM))
								    PROPS
								    (WINDOWPROP WINDOW
										  (QUOTE FETCHFN))
								    WINDOW))
		       (WINDOWPROP WINDOW (QUOTE VALUEWIDTH)
				     VALUEWIDTH))            (* VERTMARKS mark endpoints)
	    (SETQ VERTMARKS (for I from 1 to (LENGTH PROPS) as MARK
				 from (IPLUS WINDOWHEIGHT LF) by LF collect MARK))
	    (WINDOWPROP WINDOW (QUOTE VERTMARKS)
			  VERTMARKS)
	    [WINDOWPROP WINDOW (QUOTE EXTENT)
			  (CREATEREGION 0 (CAR (LAST VERTMARKS))
					  (IPLUS VALUEWIDTH (STRINGWIDTH VALUESPACE WINDOW))
					  (DIFFERENCE WINDOWHEIGHT (CAR (LAST VERTMARKS]
	    (WINDOWPROP (WINDOWPROP WINDOW (QUOTE RIGHTWINDOW))
			  (QUOTE EXTENT)
			  (CREATEREGION 0 (CAR (LAST VERTMARKS))
					  (WINDOWPROP (WINDOWPROP WINDOW (QUOTE RIGHTWINDOW))
							(QUOTE WIDTH))
					  (DIFFERENCE WINDOWHEIGHT (CAR (LAST VERTMARKS])

(ONEDINSPECT.PRINTELEMENT
  [LAMBDA (ELT BOTTOM SUB1DESCENT WINDOW)                    (* jop: " 1-Oct-85 22:21")

          (* *)


    (MOVETO 0 (IPLUS BOTTOM SUB1DESCENT)
	    WINDOW)
    (PRINTOUT WINDOW ELT])

(ONEDINSPECT.REPAINTFN
  [LAMBDA (WINDOW WINDOWREGION)                              (* jop: " 2-Oct-85 00:09")
    (if (NULL WINDOWREGION)
	then (SETQ WINDOWREGION (DSPCLIPPINGREGION NIL WINDOW)))
    (RESETLST [RESETSAVE (PRINTLEVEL (QUOTE (2 . 5]
	      (RESETSAVE PLVLFILEFLG T)
	      (RESETSAVE *PRINT-ARRAY* NIL)
	      (PROG ((TOP (fetch TOP of WINDOWREGION))
		     (BOTTOM (fetch BOTTOM of WINDOWREGION))
		     (FETCHFN (WINDOWPROP WINDOW (QUOTE FETCHFN)))
		     (DATUM (WINDOWPROP WINDOW (QUOTE DATUM)))
		     (VERTMARKS (WINDOWPROP WINDOW (QUOTE VERTMARKS)))
		     (PROPS (WINDOWPROP WINDOW (QUOTE PROPS)))
		     STARTPROP LASTPROP STARTVERTMARKS)
		    (for PROP on PROPS as MARK on VERTMARKS until (ILESSP (CAR MARK)
									  TOP)
		       finally (SETQ STARTPROP PROP)
			       (SETQ STARTVERTMARKS MARK))
		    (for PROP on STARTPROP as MARK in STARTVERTMARKS until (ILESSP MARK BOTTOM)
		       finally (SETQ LASTPROP PROP))
		    (if STARTPROP
			then (bind [DESCENT ←(SUB1 (FONTPROP WINDOW (QUOTE DESCENT] for PROP
				on STARTPROP as VMARK in STARTVERTMARKS repeatuntil (EQ PROP LASTPROP)
				do (ONEDINSPECT.PRINTELEMENT (APPLY* FETCHFN DATUM (CAR PROP))
							     VMARK DESCENT WINDOW)))
		    (ONEDINSPECT.INVERTSELECTION WINDOW])

(ONEDINSPECT.REPLACE
  [LAMBDA (WINDOW PROP NEWVALUE)                             (* jop: " 2-Oct-85 00:06")
    (PROG [(DATUM (WINDOWPROP WINDOW (QUOTE DATUM)))
	   (STOREFN (WINDOWPROP WINDOW (QUOTE STOREFN]
          (APPLY* STOREFN NEWVALUE DATUM PROP)
          (ONEDINSPECT.REDISPLAY WINDOW PROP])

(ONEDINSPECT.RESHAPEFN
  [LAMBDA (WINDOW)                                           (* jop: " 6-Oct-85 18:34")
    (CLEARW WINDOW)
    (PROG [(SELECTION (WINDOWPROP WINDOW (QUOTE SELECTION]
	    (ONEDINSPECT.MAKEREGIONS WINDOW)
	    (ONEDINSPECT.ADJUSTSELECTION WINDOW)
	    (ONEDINSPECT.REPAINTFN WINDOW])

(ONEDINSPECT.RIGHTW.BUTTONEVENTFN
  [LAMBDA (WINDOW)                                           (* jop: " 2-Oct-85 12:52")

          (* *)


    (TOTOPW WINDOW)
    (PROG ((MAINWINDOW (MAINWINDOW WINDOW))
	     (SELECTION (WINDOWPROP WINDOW (QUOTE SELECTION)))
	     PROPS PROPCOMMANDFN VERTMARKS SELECTEDPROP SELECTEDBOTTOM SELECTEDLEFT SELECTEDWIDTH)
	    (SETQ PROPS (WINDOWPROP MAINWINDOW (QUOTE PROPS)))
	    (SETQ VERTMARKS (WINDOWPROP MAINWINDOW (QUOTE VERTMARKS)))
	    (SETQ PROPCOMMANDFN (WINDOWPROP MAINWINDOW (QUOTE PROPCOMMANDFN)))
	    (if PROPCOMMANDFN
		then (if SELECTION
			   then (SETQ SELECTEDPROP (fetch (ONEDINSPECT.SELECTION PROP)
							  of SELECTION))
				  (SETQ SELECTEDBOTTOM (fetch (ONEDINSPECT.SELECTION ELTBOTTOM)
							    of SELECTION))
				  (SETQ SELECTEDLEFT (fetch (ONEDINSPECT.SELECTION ELTLEFT)
							  of SELECTION))
				  (SETQ SELECTEDWIDTH (fetch (ONEDINSPECT.SELECTION ELTWIDTH)
							   of SELECTION)))
		       (if (MOUSESTATE LEFT)
			   then [RESETLST [RESETSAVE (PRINTLEVEL (QUOTE (2 . 5]
					      (RESETSAVE *PRINT-ARRAY* NIL)
					      (bind (FHEIGHT ←(FONTPROP WINDOW (QUOTE HEIGHT)))
						      (NEWLEFT ←(STRINGWIDTH (WINDOWPROP
										 MAINWINDOW
										 (QUOTE PROPSPACE))
									       WINDOW))
						      CURSOR NEWPROP NEWVERTMARK NEWWIDTH
						 repeatwhile (MOUSESTATE LEFT)
						 do (SETQ CURSOR (CURSORPOSITION NIL WINDOW))
						      (bind (Y ←(fetch YCOORD of CURSOR))
							 for PROP on PROPS as VMARK
							 in VERTMARKS until (ILESSP VMARK Y)
							 finally (SETQ NEWPROP PROP)
								   (SETQ NEWVERTMARK VMARK))
						      (if NEWPROP
							  then (SETQ NEWWIDTH
								   (PLSTRINGWIDTH (CAR NEWPROP)
										    WINDOW)))
                                                             (* Select the new region only if the cursor is inside 
							     the element box)
						      (if [AND NEWPROP
								   (OR (ILESSP (fetch XCOORD
										      of CURSOR)
										   NEWLEFT)
									 (IGREATERP (fetch XCOORD
											 of CURSOR)
										      (IPLUS 
											  NEWLEFT 
											 NEWWIDTH]
							  then (SETQ NEWPROP NIL))
						      (if (NEQ NEWPROP SELECTEDPROP)
							  then 
                                                             (* We need to consider highlighting a new region)
								 (if SELECTEDPROP
								     then 
                                                             (* Lowlight the old region)
									    (
									 TWODINSPECT.INVERTREGION
									      SELECTEDLEFT 
									      SELECTEDBOTTOM 
									      SELECTEDWIDTH FHEIGHT 
									      WINDOW)
									    (SETQ SELECTEDPROP NIL))
								 (if NEWPROP
								     then 
                                                             (* cursor inside element box, highlight that box)
									    (
									 TWODINSPECT.INVERTREGION
									      NEWLEFT NEWVERTMARK 
									      NEWWIDTH FHEIGHT WINDOW)
									    (SETQ SELECTEDPROP 
									      NEWPROP)
									    (SETQ SELECTEDWIDTH 
									      NEWWIDTH)
									    (SETQ SELECTEDLEFT 
									      NEWLEFT)
									    (SETQ SELECTEDBOTTOM 
									      NEWVERTMARK)))
						 finally (if SELECTEDPROP
							       then (WINDOWPROP WINDOW
										    (QUOTE 
											SELECTION)
										    (create 
									    ONEDINSPECT.SELECTION
											      PROP ← 
										     SELECTEDPROP
											      
											 ELTWIDTH ← 
										    SELECTEDWIDTH
											      ELTLEFT 
											      ← 
										     SELECTEDLEFT
											      
											ELTBOTTOM ← 
										   SELECTEDBOTTOM))
							     else (WINDOWPROP WINDOW
										  (QUOTE SELECTION)
										  NIL]
			 else                              (* MOUSESTATE MIDDLE)
				(if SELECTION
				    then (APPLY* PROPCOMMANDFN (CAR SELECTEDPROP)
						     (WINDOWPROP MAINWINDOW (QUOTE DATUM))
						     MAINWINDOW])

(ONEDINSPECT.RIGHTW.REPAINTFN
  [LAMBDA (WINDOW WINDOWREGION)                              (* jop: " 1-Oct-85 23:34")
    (if (NULL WINDOWREGION)
	then (SETQ WINDOWREGION (DSPCLIPPINGREGION NIL WINDOW)))
    (PROG ((DISPLAYW (MAINWINDOW WINDOW))
	   (TOP (fetch TOP of WINDOWREGION))
	   (BOTTOM (fetch BOTTOM of WINDOWREGION))
	   VERTMARKS PROPS SPACE STARTPROPS LASTPROP STARTVERTMARKS)
          (SETQ VERTMARKS (WINDOWPROP DISPLAYW (QUOTE VERTMARKS)))
          (SETQ PROPS (WINDOWPROP DISPLAYW (QUOTE PROPS)))
          (SETQ SPACE (STRINGWIDTH (WINDOWPROP DISPLAYW (QUOTE PROPSPACE))
				   WINDOW))
          (for PROP on PROPS as MARK on VERTMARKS until (ILESSP (CAR MARK)
								TOP)
	     finally (SETQ STARTPROPS PROP)
		     (SETQ STARTVERTMARKS MARK))
          (for PROP on STARTPROPS as MARK in STARTVERTMARKS until (ILESSP MARK BOTTOM)
	     finally (SETQ LASTPROP PROP))
          [if STARTPROPS
	      then (bind (FDESCENT ←(FONTPROP WINDOW (QUOTE DESCENT))) for PROP on STARTPROPS
		      as VERTMARK in STARTVERTMARKS repeatuntil (EQ PROP LASTPROP)
		      do (MOVETO SPACE (IPLUS VERTMARK FDESCENT)
				 WINDOW)
			 (PRINTOUT WINDOW (CAR PROP]
          (ONEDINSPECT.INVERTSELECTION WINDOW])

(ONEDINSPECT.RIGHTW.RESHAPEFN
  [LAMBDA (WINDOW)                                           (* jop: " 6-Oct-85 18:35")
    (CLEARW WINDOW)
    (ONEDINSPECT.ADJUSTPROPSELECTION WINDOW)
    (ONEDINSPECT.RIGHTW.REPAINTFN WINDOW])

(ONEDINSPECT.SCROLLFN
  [LAMBDA (WINDOW DX DY FLG)                                 (* jop: " 1-Oct-85 22:41")
    (PROG [(RIGHTWINDOW (WINDOWPROP WINDOW (QUOTE RIGHTWINDOW]
          (if (OR (NOT (EQP 0 DY))
		  (FLOATP DY))
	      then (APPLY* (WINDOWPROP RIGHTWINDOW (QUOTE SCROLLFN))
			   RIGHTWINDOW 0 DY FLG))
          (SCROLLBYREPAINTFN WINDOW DX DY FLG])

(ONEDINSPECT.SELECTITEM
  [LAMBDA (WINDOW PROP)                                      (* jop: "10-Oct-85 16:46")

          (* *)


    (if (WINDOWPROP WINDOW (QUOTE SELECTION))
	then (ONEDINSPECT.INVERTSELECTION WINDOW))
    (if PROP
	then (RESETLST [RESETSAVE (PRINTLEVEL (QUOTE (2 . 5]
			   (RESETSAVE *PRINT-ARRAY* NIL)
			   (PROG ((DATUM (WINDOWPROP WINDOW (QUOTE DATUM)))
				    (FETCHFN (WINDOWPROP WINDOW (QUOTE FETCHFN)))
				    (PROPS (WINDOWPROP WINDOW (QUOTE PROPS)))
				    (VERTMARKS (WINDOWPROP WINDOW (QUOTE VERTMARKS)))
				    (HORZMARKS (WINDOWPROP WINDOW (QUOTE HORZMARKS)))
				    SELECTEDPROP SELECTEDELTBOTTOM SELECTEDELTWIDTH)
			           (SETQ SELECTEDPROP (for PRP on PROPS
							   thereis (EQUAL (CAR PRP)
									      PROP)))
			           (SETQ SELECTEDELTBOTTOM
				     (for VMARK in VERTMARKS as PRP on PROPS
					thereis (EQ PRP SELECTEDPROP)))
			           (SETQ SELECTEDELTWIDTH (PLSTRINGWIDTH (APPLY* FETCHFN DATUM 
										       PROP)
									     WINDOW))
			           (TWODINSPECT.INVERTREGION 0 SELECTEDELTBOTTOM SELECTEDELTWIDTH
							       (FONTPROP WINDOW (QUOTE HEIGHT))
							       WINDOW)
			           (WINDOWPROP WINDOW (QUOTE SELECTION)
						 (create ONEDINSPECT.SELECTION
							   PROP ← SELECTEDPROP
							   ELTWIDTH ← SELECTEDELTWIDTH
							   ELTLEFT ← 0
							   ELTBOTTOM ← SELECTEDELTBOTTOM])

(ONEDINSPECT.SELECTPROP
  [LAMBDA (WINDOW PROP)                                      (* jop: "31-Dec-00 19:49")

          (* *)


    (PROG [(RIGHTWINDOW (WINDOWPROP WINDOW (QUOTE RIGHTWINDOW]
	    (if (WINDOWPROP RIGHTWINDOW (QUOTE SELECTION))
		then (ONEDINSPECT.INVERTSELECTION RIGHTWINDOW))
	    (RESETLST [RESETSAVE (PRINTLEVEL (QUOTE (2 . 5]
			(RESETSAVE *PRINT-ARRAY* NIL)
			(PROG ((PROPSPACE (WINDOWPROP WINDOW (QUOTE PROPSPACE)))
				 (PROPS (WINDOWPROP WINDOW (QUOTE PROPS)))
				 (VERTMARKS (WINDOWPROP WINDOW (QUOTE VERTMARKS)))
				 SELECTEDPROP SELECTEDELTBOTTOM SELECTEDELTLEFT SELECTEDELTWIDTH)
			        (SETQ SELECTEDPROP (for PRP on PROPS
							thereis (EQUAL (CAR PRP)
									   PROP)))
			        (SETQ SELECTEDELTBOTTOM
				  (for VMARK in VERTMARKS as PRP on PROPS
				     thereis (EQ PRP SELECTEDPROP)))
			        (SETQ SELECTEDELTWIDTH (PLSTRINGWIDTH (CAR SELECTEDPROP)
									  WINDOW))
			        (SETQ SELECTEDELTLEFT (STRINGWIDTH PROPSPACE WINDOW))
			        (TWODINSPECT.INVERTREGION SELECTEDELTLEFT SELECTEDELTBOTTOM 
							    SELECTEDELTWIDTH (FONTPROP
							      WINDOW
							      (QUOTE HEIGHT))
							    RIGHTWINDOW)
			        (WINDOWPROP RIGHTWINDOW (QUOTE SELECTION)
					      (create ONEDINSPECT.SELECTION
							PROP ← SELECTEDPROP
							ELTWIDTH ← SELECTEDELTWIDTH
							ELTLEFT ← SELECTEDELTLEFT
							ELTBOTTOM ← SELECTEDELTBOTTOM])

(ONEDINSPECT.SETELT
  [LAMBDA (PROP WINDOW)                                      (* jop: " 2-Oct-85 12:44")

          (* *)


    (PROG ((PRTWINDOW (GETPROMPTWINDOW WINDOW (if (ILESSP (fetch WIDTH of (WINDOWREGION WINDOW))
							  (IPLUS (ITIMES 5 (STRINGWIDTH (QUOTE A)
											WINDOW))
								 (STRINGWIDTH "? " WINDOW)))
						  then 3
						else 1)))
	   NEWVALUE)
          [RESETFORM (SET.TTYINEDIT.WINDOW PRTWINDOW)
		     (SETQ NEWVALUE (EVAL (CAR (TTYIN "? " NIL NIL (QUOTE EVALQT)
						      NIL NIL NIL T]
          (REMOVEPROMPTWINDOW WINDOW)
          (ONEDINSPECT.REPLACE WINDOW PROP NEWVALUE])

(ONEDINSPECTW.CREATE
  [LAMBDA (DATUM PROPS FETCHFN STOREFN VALUECOMMANDFN PROPCOMMANDFN TITLE TITLECOMMANDFN WHERE 
		 TOPRIGHT)                                   (* jop: "10-Oct-85 21:06")

          (* * If where is a window, it may be the result of a previous call, so try to reuse all windows)


    (PROG ([FONT (OR INSPECTORFONT (DEFAULTFONT (QUOTE DISPLAY]
	     [TITLEFONT (OR (DSPFONT NIL WindowTitleDisplayStream)
			      (QUOTE (HELVETICA 8 MRR]
	     DISPLAYWINDOW RIGHTWINDOW TITLEWINDOW GLEFT GBOTTOM GWIDTH GHEIGHT)
	    (if (LITATOM PROPS)
		then (SETQ PROPS (APPLY* PROPS DATUM)))
                                                             (* DISPLAYWINDOW is the central and main window of the
							     group)
	    (SETQ DISPLAYWINDOW (if (WINDOWP WHERE)
				      then WHERE
				    else (CREATEW (CREATEREGION 0 0 100 100)
						      NIL 2 T)))
	    (WINDOWPROP DISPLAYWINDOW (QUOTE REPAINTFN)
			  (FUNCTION ONEDINSPECT.REPAINTFN))
	    (WINDOWPROP DISPLAYWINDOW (QUOTE RESHAPEFN)
			  (FUNCTION ONEDINSPECT.RESHAPEFN))
	    (WINDOWPROP DISPLAYWINDOW (QUOTE SCROLLFN)
			  (FUNCTION ONEDINSPECT.SCROLLFN))
	    (WINDOWPROP DISPLAYWINDOW (QUOTE BUTTONEVENTFN)
			  (FUNCTION ONEDINSPECT.BUTTONEVENTFN))
	    (WINDOWPROP DISPLAYWINDOW (QUOTE CLOSEFN)
			  (FUNCTION ONEDINSPECT.CLOSEFN))
	    (DSPRIGHTMARGIN MAX.SMALLP DISPLAYWINDOW)
	    (DSPFONT FONT DISPLAYWINDOW)
	    (WINDOWPROP DISPLAYWINDOW (QUOTE DATUM)
			  DATUM)
	    (WINDOWPROP DISPLAYWINDOW (QUOTE FETCHFN)
			  FETCHFN)
	    (WINDOWPROP DISPLAYWINDOW (QUOTE STOREFN)
			  STOREFN)
	    (WINDOWPROP DISPLAYWINDOW (QUOTE VALUECOMMANDFN)
			  (OR VALUECOMMANDFN (FUNCTION ONEDINSPECT.DEFAULT.VALUECOMMANDFN)))
	    (WINDOWPROP DISPLAYWINDOW (QUOTE PROPCOMMANDFN)
			  PROPCOMMANDFN)
	    (WINDOWPROP DISPLAYWINDOW (QUOTE TITLECOMMANDFN)
			  (OR TITLECOMMANDFN (FUNCTION ONEDINSPECT.DEFAULT.TITLECOMMANDFN)))
	    (WINDOWPROP DISPLAYWINDOW (QUOTE PROPS)
			  PROPS)
	    (WINDOWPROP DISPLAYWINDOW (QUOTE PROPWIDTH)
			  (ONEDINSPECT.PROPWIDTH PROPS FONT))
	    (WINDOWPROP DISPLAYWINDOW (QUOTE PROPSPACE)
			  " ")
	    (WINDOWPROP DISPLAYWINDOW (QUOTE VALUEWIDTH)
			  (ONEDINSPECT.VALUEWIDTH DATUM PROPS FETCHFN FONT))
	    (WINDOWPROP DISPLAYWINDOW (QUOTE VALUESPACE)
			  " ")                               (* RIGHTWINDOW records the ROWPROPS)
	    (SETQ RIGHTWINDOW (OR (WINDOWPROP DISPLAYWINDOW (QUOTE RIGHTWINDOW))
				      (CREATEW (CREATEREGION 0 0 100 100)
						 NIL
						 (WINDOWPROP DISPLAYWINDOW (QUOTE BORDER))
						 T)))
	    (WINDOWPROP RIGHTWINDOW (QUOTE REPAINTFN)
			  (FUNCTION ONEDINSPECT.RIGHTW.REPAINTFN))
	    (WINDOWPROP RIGHTWINDOW (QUOTE RESHAPEFN)
			  (FUNCTION ONEDINSPECT.RIGHTW.RESHAPEFN))
	    (WINDOWPROP RIGHTWINDOW (QUOTE BUTTONEVENTFN)
			  (FUNCTION ONEDINSPECT.RIGHTW.BUTTONEVENTFN))
	    (WINDOWPROP RIGHTWINDOW (QUOTE SCROLLFN)
			  (FUNCTION SCROLLBYREPAINTFN))
	    (WINDOWPROP RIGHTWINDOW (QUOTE NOSCROLLBARS)
			  T)
	    (DSPFONT FONT RIGHTWINDOW)
	    (WINDOWPROP DISPLAYWINDOW (QUOTE RIGHTWINDOW)
			  RIGHTWINDOW)                       (* TITLEWINDOW will only hold a title)
	    (SETQ TITLEWINDOW (OR (WINDOWPROP DISPLAYWINDOW (QUOTE TITLEWINDOW))
				      (CREATEW (CREATEREGION 0 0 100 100)
						 NIL 1 T)))
	    (WINDOWPROP TITLEWINDOW (QUOTE REPAINTFN)
			  (FUNCTION TITLEW.REPAINTFN))
	    (WINDOWPROP TITLEWINDOW (QUOTE RESHAPEFN)
			  (FUNCTION TITLEW.REPAINTFN))
	    (WINDOWPROP TITLEWINDOW (QUOTE BUTTONEVENTFN)
			  (FUNCTION TITLEW.BUTTONEVENTFN))
	    (DSPFONT TITLEFONT TITLEWINDOW)
	    (DSPOPERATION (QUOTE INVERT)
			    TITLEWINDOW)
	    [WINDOWPROP TITLEWINDOW (QUOTE INSPECTTITLE)
			  (OR TITLE (RESETVAR *PRINT-ARRAY* NIL (CONCAT "Inspector of " DATUM]
	    (WINDOWPROP DISPLAYWINDOW (QUOTE TITLEWINDOW)
			  TITLEWINDOW)                       (* Put up the window group)
	    [if (NOT (POSITIONP TOPRIGHT))
		then (if (WINDOWP WHERE)
			   then (LET [(REGION (WINDOWPROP WHERE (QUOTE REGION]
				       (SETQ GLEFT (fetch LEFT of REGION))
				       (SETQ GBOTTOM (fetch BOTTOM of REGION))
				       (SETQ GWIDTH (fetch WIDTH of REGION))
				       (SETQ GHEIGHT (fetch HEIGHT of REGION)))
			 elseif (REGIONP WHERE)
			   then (SETQ GLEFT (fetch LEFT of WHERE))
				  (SETQ GBOTTOM (fetch BOTTOM of WHERE))
				  (SETQ GWIDTH (fetch WIDTH of WHERE))
				  (SETQ GHEIGHT (fetch HEIGHT of WHERE))
			 elseif (POSITIONP WHERE)
			   then (SETQ GLEFT (fetch XCOORD of WHERE))
				  (SETQ GBOTTOM (fetch YCOORD of WHERE]
	    (RETURN (ONEDINSPECT.ARRANGEWINDOWS DISPLAYWINDOW RIGHTWINDOW TITLEWINDOW GLEFT 
						    GBOTTOM GWIDTH GHEIGHT TOPRIGHT])

(TWODINSPECT.COLUMNWIDTH
  [LAMBDA (DATUM ROWPROPS COLUMNPROP FETCHFN FONT)           (* jop: "29-Sep-85 16:26")

          (* * Computes the MIN fieldwidth for the COLUMNPROP column of SLICE)


    (RESETLST [RESETSAVE (PRINTLEVEL (QUOTE (2 . 5]
	      (RESETSAVE *PRINT-ARRAY* NIL)
	      (IMAX (PLSTRINGWIDTH COLUMNPROP FONT)
		    (PLSTRINGWIDTH (APPLY* FETCHFN DATUM (for ROWPROP in ROWPROPS
							    largest (PLSTRINGWIDTH (APPLY* FETCHFN 
											   DATUM 
											  ROWPROP 
										       COLUMNPROP)
										   FONT))
					   COLUMNPROP)
				   FONT])

(TWODINSPECT.COLUMNWIDTHS
  [LAMBDA (DATUM ROWPROPS COLUMNPROPS FETCHFN FONT)          (* jop: "25-Sep-85 12:35")

          (* * Computes the MIN fieldwidth for the jth column of SLICE)


    (for COLUMNPROP in COLUMNPROPS collect (TWODINSPECT.COLUMNWIDTH DATUM ROWPROPS COLUMNPROP FETCHFN 
								    FONT])

(TWODINSPECT.CLOSEFN
  [LAMBDA (WINDOW)                                           (* jop: " 4-Oct-85 17:51")
    (DETACHALLWINDOWS (WINDOWPROP WINDOW (QUOTE RIGHTWINDOW)))
    (DETACHALLWINDOWS WINDOW)
    (WINDOWPROP WINDOW (QUOTE SELECTION)
		  NIL)
    (WINDOWPROP (WINDOWPROP WINDOW (QUOTE RIGHTWINDOW))
		  (QUOTE SELECTION)
		  NIL)
    (WINDOWPROP (WINDOWPROP WINDOW (QUOTE TOPWINDOW))
		  (QUOTE SELECTION)
		  NIL])

(TWODINSPECT.ARRANGEWINDOWS
  [LAMBDA (DISPLAYWINDOW TOPWINDOW RIGHTWINDOW CORNERWINDOW TITLEWINDOW TOTALLEFT TOTALBOTTOM 
			 TOTALWIDTH TOTALHEIGHT TOPRIGHT)    (* jop: " 6-Oct-85 13:29")

          (* * REGION should be the total available area)


    (PROG ((ROWPROPS (WINDOWPROP DISPLAYWINDOW (QUOTE ROWPROPS)))
	     (COLUMNPROPS (WINDOWPROP DISPLAYWINDOW (QUOTE COLUMNPROPS)))
	     (ROWPROPWIDTH (WINDOWPROP DISPLAYWINDOW (QUOTE ROWPROPWIDTH)))
	     (ROWPROPSPACE (WINDOWPROP DISPLAYWINDOW (QUOTE ROWPROPSPACE)))
	     (COLUMNWIDTHS (WINDOWPROP DISPLAYWINDOW (QUOTE COLUMNWIDTHS)))
	     (COLUMNPROPSPACE (WINDOWPROP DISPLAYWINDOW (QUOTE COLUMNPROPSPACE)))
	     TOTALRIGHT TOTALTOP DWHEIGHT DWWIDTH TITLEHEIGHT TWHEIGHT RWWIDTH DWLEFT DWBOTTOM)
	    [SETQ TITLEHEIGHT (HEIGHTIFWINDOW (FONTPROP TITLEWINDOW (QUOTE HEIGHT))
						  NIL
						  (WINDOWPROP TITLEWINDOW (QUOTE BORDER]
	    [SETQ TWHEIGHT (HEIGHTIFWINDOW (FONTPROP TOPWINDOW (QUOTE HEIGHT))
					       NIL
					       (WINDOWPROP TOPWINDOW (QUOTE BORDER]
	    [SETQ RWWIDTH (WIDTHIFWINDOW (IPLUS (STRINGWIDTH ROWPROPSPACE RIGHTWINDOW)
						      ROWPROPWIDTH)
					     (WINDOWPROP RIGHTWINDOW (QUOTE BORDER]
	    [if (NULL TOTALHEIGHT)
		then [SETQ DWHEIGHT (IMIN 500 (HEIGHTIFWINDOW (ITIMES (FONTPROP
										  DISPLAYWINDOW
										  (QUOTE HEIGHT))
										(LENGTH ROWPROPS))
								      NIL
								      (WINDOWPROP DISPLAYWINDOW
										    (QUOTE BORDER]
		       (SETQ TOTALHEIGHT (IPLUS TITLEHEIGHT TWHEIGHT DWHEIGHT))
	      else (SETQ DWHEIGHT (IDIFFERENCE TOTALHEIGHT (IPLUS TWHEIGHT TITLEHEIGHT]
	    (if (NULL TOTALWIDTH)
		then [SETQ DWWIDTH (IMIN 400 (WIDTHIFWINDOW (TWODINSPECT.TOTALWIDTH
								      COLUMNWIDTHS COLUMNPROPSPACE
								      (DSPFONT DISPLAYWINDOW))
								    (WINDOWPROP DISPLAYWINDOW
										  (QUOTE BORDER]
		       (SETQ TOTALWIDTH (IPLUS RWWIDTH DWWIDTH))
	      else (SETQ DWWIDTH (IDIFFERENCE TOTALWIDTH RWWIDTH)))
	    [if (POSITIONP TOPRIGHT)
		then (SETQ TOTALRIGHT (fetch XCOORD of TOPRIGHT))
		       (SETQ TOTALTOP (fetch YCOORD of TOPRIGHT))
	      elseif (AND TOTALLEFT TOTALBOTTOM)
		then (SETQ TOTALRIGHT (IPLUS TOTALLEFT (SUB1 TOTALWIDTH)))
		       (SETQ TOTALTOP (IPLUS TOTALBOTTOM (SUB1 TOTALHEIGHT)))
	      else (LET ((REGION (GETBOXREGION TOTALWIDTH TOTALHEIGHT NIL NIL NIL 
						   "Position Inspector window")))
		          (SETQ TOTALTOP (fetch TOP of REGION))
		          (SETQ TOTALRIGHT (fetch RIGHT of REGION]
	    [SETQ DWLEFT (DIFFERENCE TOTALRIGHT (SUB1 (PLUS DWWIDTH RWWIDTH]
	    (if (ILESSP DWLEFT 0)
		then (SETQ DWLEFT 0)
		       (SETQ DWWIDTH (DIFFERENCE (ADD1 TOTALRIGHT)
						     RWWIDTH)))
	    [SETQ DWBOTTOM (DIFFERENCE TOTALTOP (SUB1 (PLUS DWHEIGHT TWHEIGHT TITLEHEIGHT]
	    [if (LESSP DWBOTTOM 0)
		then (SETQ DWBOTTOM 0)
		       (SETQ DWHEIGHT (DIFFERENCE (ADD1 TOTALTOP)
						      (PLUS TWHEIGHT TITLEHEIGHT]

          (* * put up the window group)


	    (WINDOWPROP DISPLAYWINDOW (QUOTE MINSIZE)
			  (CONS 0 0))
	    (SHAPEW DISPLAYWINDOW (CREATEREGION DWLEFT DWBOTTOM DWWIDTH DWHEIGHT))
                                                             (* Need to set the Minsize BEFORE reshaping else we 
							     catch the default minsize)
	    (WINDOWPROP TOPWINDOW (QUOTE MINSIZE)
			  (CONS 0 TWHEIGHT))
	    (WINDOWPROP TOPWINDOW (QUOTE MAXSIZE)
			  (CONS MAX.SMALLP TWHEIGHT))
	    (SHAPEW TOPWINDOW (CREATEREGION DWLEFT [ADD1 (fetch TOP
								  of (WINDOWPROP DISPLAYWINDOW
										     (QUOTE REGION]
						DWWIDTH TWHEIGHT))
	    (ATTACHWINDOW TOPWINDOW DISPLAYWINDOW (QUOTE TOP))
	    (WINDOWPROP RIGHTWINDOW (QUOTE MINSIZE)
			  (CONS RWWIDTH 0))
	    (WINDOWPROP RIGHTWINDOW (QUOTE MAXSIZE)
			  (CONS RWWIDTH MAX.SMALLP))
	    (SHAPEW RIGHTWINDOW (CREATEREGION [ADD1 (fetch RIGHT of (WINDOWPROP
										DISPLAYWINDOW
										(QUOTE REGION]
						  DWBOTTOM RWWIDTH DWHEIGHT))
	    (WINDOWPROP CORNERWINDOW (QUOTE MINSIZE)
			  (CONS RWWIDTH TWHEIGHT))
	    (WINDOWPROP CORNERWINDOW (QUOTE MAXSIZE)
			  (CONS RWWIDTH TWHEIGHT))
	    (SHAPEW CORNERWINDOW (CREATEREGION [ADD1 (fetch RIGHT of (WINDOWPROP
										 DISPLAYWINDOW
										 (QUOTE REGION]
						   [ADD1 (fetch TOP of (WINDOWPROP
									       DISPLAYWINDOW
									       (QUOTE REGION]
						   RWWIDTH TWHEIGHT))
	    (ATTACHWINDOW CORNERWINDOW RIGHTWINDOW (QUOTE TOP))
	    (ATTACHWINDOW RIGHTWINDOW DISPLAYWINDOW (QUOTE RIGHT))
	    (WINDOWPROP TITLEWINDOW (QUOTE MINSIZE)
			  (CONS 0 TITLEHEIGHT))
	    (WINDOWPROP TITLEWINDOW (QUOTE MAXSIZE)
			  (CONS MAX.SMALLP TITLEHEIGHT))
	    (SHAPEW TITLEWINDOW (CREATEREGION DWLEFT [ADD1 (fetch TOP (WINDOWPROP
									    TOPWINDOW
									    (QUOTE REGION]
						  TOTALWIDTH TITLEHEIGHT))
	    (ATTACHWINDOW TITLEWINDOW DISPLAYWINDOW (QUOTE TOP))
	    (RETURN DISPLAYWINDOW])

(TWODINSPECTW.CREATE
  [LAMBDA (DATUM ROWPROPS COLUMNPROPS FETCHFN STOREFN VALUECOMMANDFN ROWPROPCOMMANDFN 
		 COLUMNPROPCOMMANDFN TITLE TITLECOMMANDFN WHERE TOPRIGHT)
                                                             (* jop: "10-Oct-85 21:05")

          (* * If where is a window, it may be the result of a previous call, so try to reuse all windows)


    (PROG ([FONT (OR INSPECTORFONT (DEFAULTFONT (QUOTE DISPLAY]
	     [TITLEFONT (OR (DSPFONT NIL WindowTitleDisplayStream)
			      (QUOTE (HELVETICA 8 MRR]
	     DISPLAYWINDOW TOPWINDOW RIGHTWINDOW CORNERWINDOW TITLEWINDOW GLEFT GBOTTOM GWIDTH 
	     GHEIGHT)
	    (if (LITATOM ROWPROPS)
		then (SETQ ROWPROPS (APPLY* ROWPROPS DATUM)))
	    (if (LITATOM COLUMNPROPS)
		then (SETQ COLUMNPROPS (APPLY* COLUMNPROPS DATUM)))
                                                             (* DISPLAYWINDOW is the central and main window of the
							     group)
	    (SETQ DISPLAYWINDOW (if (WINDOWP WHERE)
				      then WHERE
				    else (CREATEW (CREATEREGION 0 0 100 100)
						      NIL 2 T)))
	    (WINDOWPROP DISPLAYWINDOW (QUOTE REPAINTFN)
			  (FUNCTION TWODINSPECT.REPAINTFN))
	    (WINDOWPROP DISPLAYWINDOW (QUOTE RESHAPEFN)
			  (FUNCTION TWODINSPECT.RESHAPEFN))
	    (WINDOWPROP DISPLAYWINDOW (QUOTE SCROLLFN)
			  (FUNCTION TWODINSPECT.SCROLLFN))
	    (WINDOWPROP DISPLAYWINDOW (QUOTE BUTTONEVENTFN)
			  (FUNCTION TWODINSPECT.BUTTONEVENTFN))
	    (WINDOWPROP DISPLAYWINDOW (QUOTE CLOSEFN)
			  (FUNCTION TWODINSPECT.CLOSEFN))
	    (DSPRIGHTMARGIN MAX.SMALLP DISPLAYWINDOW)
	    (DSPFONT FONT DISPLAYWINDOW)
	    (WINDOWPROP DISPLAYWINDOW (QUOTE DATUM)
			  DATUM)
	    (WINDOWPROP DISPLAYWINDOW (QUOTE FETCHFN)
			  FETCHFN)
	    (WINDOWPROP DISPLAYWINDOW (QUOTE STOREFN)
			  STOREFN)
	    (WINDOWPROP DISPLAYWINDOW (QUOTE VALUECOMMANDFN)
			  (OR VALUECOMMANDFN (FUNCTION TWODINSPECT.DEFAULT.VALUECOMMANDFN)))
	    (WINDOWPROP DISPLAYWINDOW (QUOTE ROWPROPCOMMANDFN)
			  ROWPROPCOMMANDFN)
	    (WINDOWPROP DISPLAYWINDOW (QUOTE COLUMNPROPCOMMANDFN)
			  COLUMNPROPCOMMANDFN)
	    (WINDOWPROP DISPLAYWINDOW (QUOTE TITLECOMMANDFN)
			  (OR TITLECOMMANDFN (FUNCTION TWODINSPECT.DEFAULT.TITLECOMMANDFN)))
	    (WINDOWPROP DISPLAYWINDOW (QUOTE ROWPROPS)
			  ROWPROPS)
	    (WINDOWPROP DISPLAYWINDOW (QUOTE ROWPROPWIDTH)
			  (TWODINSPECT.ROWPROPWIDTH ROWPROPS FONT))
	    (WINDOWPROP DISPLAYWINDOW (QUOTE ROWPROPSPACE)
			  " ")
	    (WINDOWPROP DISPLAYWINDOW (QUOTE COLUMNPROPS)
			  COLUMNPROPS)
	    (WINDOWPROP DISPLAYWINDOW (QUOTE COLUMNWIDTHS)
			  (TWODINSPECT.COLUMNWIDTHS DATUM ROWPROPS COLUMNPROPS FETCHFN FONT))
	    (WINDOWPROP DISPLAYWINDOW (QUOTE COLUMNPROPSPACE)
			  "  ")                              (* TOPWINDOW simply records the COLUMNPROPS)
	    (SETQ TOPWINDOW (OR (WINDOWPROP DISPLAYWINDOW (QUOTE TOPWINDOW))
				    (CREATEW (CREATEREGION 0 0 100 100)
					       NIL
					       (WINDOWPROP DISPLAYWINDOW (QUOTE BORDER))
					       T)))
	    (WINDOWPROP TOPWINDOW (QUOTE REPAINTFN)
			  (FUNCTION TWODINSPECT.TOPW.REPAINTFN))
	    (WINDOWPROP TOPWINDOW (QUOTE RESHAPEFN)
			  (FUNCTION TWODINSPECT.TOPW.RESHAPEFN))
	    (WINDOWPROP TOPWINDOW (QUOTE BUTTONEVENTFN)
			  (FUNCTION TWODINSPECT.TOPW.BUTTONEVENTFN))
	    (WINDOWPROP TOPWINDOW (QUOTE SCROLLFN)
			  (FUNCTION SCROLLBYREPAINTFN))
	    (DSPRIGHTMARGIN MAX.SMALLP TOPWINDOW)          (* TOPWINDOW will scroll under program control)
	    (WINDOWPROP TOPWINDOW (QUOTE NOSCROLLBARS)
			  T)
	    (DSPFONT FONT TOPWINDOW)
	    (WINDOWPROP DISPLAYWINDOW (QUOTE TOPWINDOW)
			  TOPWINDOW)                         (* RIGHTWINDOW records the ROWPROPS)
	    (SETQ RIGHTWINDOW (OR (WINDOWPROP DISPLAYWINDOW (QUOTE RIGHTWINDOW))
				      (CREATEW (CREATEREGION 0 0 100 100)
						 NIL
						 (WINDOWPROP DISPLAYWINDOW (QUOTE BORDER))
						 T)))
	    (WINDOWPROP RIGHTWINDOW (QUOTE REPAINTFN)
			  (FUNCTION TWODINSPECT.RIGHTW.REPAINTFN))
	    (WINDOWPROP RIGHTWINDOW (QUOTE RESHAPEFN)
			  (FUNCTION TWODINSPECT.RIGHTW.RESHAPEFN))
	    (WINDOWPROP RIGHTWINDOW (QUOTE BUTTONEVENTFN)
			  (FUNCTION TWODINSPECT.RIGHTW.BUTTONEVENTFN))
	    (WINDOWPROP RIGHTWINDOW (QUOTE SCROLLFN)
			  (FUNCTION SCROLLBYREPAINTFN))
	    (WINDOWPROP RIGHTWINDOW (QUOTE NOSCROLLBARS)
			  T)
	    (DSPFONT FONT RIGHTWINDOW)
	    (WINDOWPROP DISPLAYWINDOW (QUOTE RIGHTWINDOW)
			  RIGHTWINDOW)                       (* CORNERWINDOW is just a place holder)
	    (SETQ CORNERWINDOW (OR (WINDOWPROP DISPLAYWINDOW (QUOTE CORNERWINDOW))
				       (CREATEW (CREATEREGION 0 0 100 100)
						  NIL
						  (WINDOWPROP DISPLAYWINDOW (QUOTE BORDER))
						  T)))
	    (DSPFONT FONT CORNERWINDOW)
	    (WINDOWPROP DISPLAYWINDOW (QUOTE CORNERWINDOW)
			  CORNERWINDOW)                      (* TITLEWINDOW will only hold a title)
	    (SETQ TITLEWINDOW (OR (WINDOWPROP DISPLAYWINDOW (QUOTE TITLEWINDOW))
				      (CREATEW (CREATEREGION 0 0 100 100)
						 NIL 1 T)))
	    (WINDOWPROP TITLEWINDOW (QUOTE REPAINTFN)
			  (FUNCTION TITLEW.REPAINTFN))
	    (WINDOWPROP TITLEWINDOW (QUOTE RESHAPEFN)
			  (FUNCTION TITLEW.REPAINTFN))
	    (WINDOWPROP TITLEWINDOW (QUOTE BUTTONEVENTFN)
			  (FUNCTION TITLEW.BUTTONEVENTFN))
	    (DSPFONT TITLEFONT TITLEWINDOW)
	    (DSPOPERATION (QUOTE INVERT)
			    TITLEWINDOW)
	    [WINDOWPROP TITLEWINDOW (QUOTE INSPECTTITLE)
			  (OR TITLE (RESETLST [RESETSAVE (PRINTLEVEL (QUOTE (2 . 5]
						  (RESETSAVE *PRINT-ARRAY* NIL)
						  (CONCAT "Inspector of " DATUM]
	    (WINDOWPROP DISPLAYWINDOW (QUOTE TITLEWINDOW)
			  TITLEWINDOW)                       (* Put up the window group)
	    [if (NOT (POSITIONP TOPRIGHT))
		then (if (WINDOWP WHERE)
			   then (LET ((REGION (WINDOWREGION WHERE)))
				       (SETQ GLEFT (fetch LEFT of REGION))
				       (SETQ GBOTTOM (fetch BOTTOM of REGION))
				       (SETQ GWIDTH (fetch WIDTH of REGION))
				       (SETQ GHEIGHT (fetch HEIGHT of REGION)))
			 elseif (REGIONP WHERE)
			   then (SETQ GLEFT (fetch LEFT of WHERE))
				  (SETQ GBOTTOM (fetch BOTTOM of WHERE))
				  (SETQ GWIDTH (fetch WIDTH of WHERE))
				  (SETQ GHEIGHT (fetch HEIGHT of WHERE))
			 elseif (POSITIONP WHERE)
			   then (SETQ GLEFT (fetch XCOORD of WHERE))
				  (SETQ GBOTTOM (fetch YCOORD of WHERE]
	    (RETURN (TWODINSPECT.ARRANGEWINDOWS DISPLAYWINDOW TOPWINDOW RIGHTWINDOW CORNERWINDOW 
						    TITLEWINDOW GLEFT GBOTTOM GWIDTH GHEIGHT TOPRIGHT]
)

(TITLEW.BUTTONEVENTFN
  [LAMBDA (TITLEWINDOW)                                      (* jop: " 1-Oct-85 20:48")

          (* *)


    (PROG ((MAINWINDOW (MAINWINDOW TITLEWINDOW))
	   TITLECOMMANDFN)
          (SETQ TITLECOMMANDFN (WINDOWPROP MAINWINDOW (QUOTE TITLECOMMANDFN)))
          (if TITLECOMMANDFN
	      then (APPLY* TITLECOMMANDFN MAINWINDOW])

(TWODINSPECT.DEFAULT.TITLECOMMANDFN
  [LAMBDA (WINDOW)                                           (* jop: " 1-Oct-85 21:13")

          (* *)


    (if (MOUSESTATE MIDDLE)
	then (RESETLST [RESETSAVE (PRINTLEVEL (QUOTE (2 . 5]
		       (RESETSAVE PLVLFILEFLG T)
		       (RESETSAVE *PRINT-ARRAY* NIL)
		       (PROG [[TITLEMENU (CONSTANT (create MENU
							   ITEMS ←(QUOTE ((Refetch (QUOTE REFETCH)
										   
									      "Refetch the datum")
									   ("IT ← Datum"
									     (QUOTE IT)
									     
								 "Bind IT to the inspected datum"]
			      (DATUM (WINDOWPROP WINDOW (QUOTE DATUM]
			     (SELECTQ (MENU TITLEMENU)
				      (REFETCH (TWODINSPECT.REDISPLAY WINDOW))
				      (IT (SETQ IT DATUM)
					  (PROMPTPRINT "IT bound to " DATUM))
				      NIL])

(TITLEW.REPAINTFN
  [LAMBDA (WINDOW)                                           (* jop: "29-Sep-85 13:16")

          (* *)


    (BITBLT NIL NIL NIL WINDOW NIL NIL NIL NIL (QUOTE TEXTURE)
	    (QUOTE REPLACE)
	    BLACKSHADE)
    (MOVETOUPPERLEFT WINDOW)
    (PRINTOUT WINDOW (WINDOWPROP WINDOW (QUOTE INSPECTTITLE])

(TWODINSPECT.INVERTREGION
  [LAMBDA (LEFT BOTTOM WIDTH HEIGHT WINDOW)                  (* jop: "27-Sep-85 17:09")
    (BITBLT NIL NIL NIL WINDOW LEFT BOTTOM WIDTH HEIGHT (QUOTE TEXTURE)
	    (QUOTE INVERT)
	    BLACKSHADE])

(TWODINSPECT.BUTTONEVENTFN
  [LAMBDA (WINDOW)                                           (* jop: "25-Nov-85 12:42")

          (* *)


    (TOTOPW WINDOW)
    (PROG ((DATUM (WINDOWPROP WINDOW (QUOTE DATUM)))
	     (FETCHFN (WINDOWPROP WINDOW (QUOTE FETCHFN)))
	     (ROWPROPS (WINDOWPROP WINDOW (QUOTE ROWPROPS)))
	     (COLUMNPROPS (WINDOWPROP WINDOW (QUOTE COLUMNPROPS)))
	     (VERTMARKS (WINDOWPROP WINDOW (QUOTE VERTMARKS)))
	     (HORZMARKS (WINDOWPROP WINDOW (QUOTE HORZMARKS)))
	     (SELECTION (WINDOWPROP WINDOW (QUOTE SELECTION)))
	     SELECTEDROWPROP SELECTEDCOLUMNPROP SELECTEDELTBOTTOM SELECTEDELTLEFT SELECTEDELTWIDTH)
	    (if SELECTION
		then (SETQ SELECTEDROWPROP (fetch (TWODINSPECT.SELECTION ROWPROP) of 
											SELECTION))
		       (SETQ SELECTEDCOLUMNPROP (fetch (TWODINSPECT.SELECTION COLUMNPROP)
						     of SELECTION))
		       (SETQ SELECTEDELTBOTTOM (fetch (TWODINSPECT.SELECTION ELTBOTTOM)
						    of SELECTION))
		       (SETQ SELECTEDELTLEFT (fetch (TWODINSPECT.SELECTION ELTLEFT) of 
											SELECTION))
		       (SETQ SELECTEDELTWIDTH (fetch (TWODINSPECT.SELECTION ELTWIDTH)
						   of SELECTION)))
	    (if (MOUSESTATE LEFT)
		then [RESETLST [RESETSAVE (PRINTLEVEL (QUOTE (2 . 5]
				   (RESETSAVE *PRINT-ARRAY* NIL)
				   (bind (FHEIGHT ←(FONTPROP WINDOW (QUOTE HEIGHT)))
					   CURSOR NEWROWPROP NEWVERTMARK NEWCOLUMNPROP NEWHORZMARK 
					   NEWELTWIDTH NEWELTLEFT repeatwhile (MOUSESTATE LEFT)
				      do (SETQ CURSOR (CURSORPOSITION NIL WINDOW))
					   (bind (Y ←(fetch YCOORD of CURSOR)) for ROWPROP
					      on ROWPROPS as VERTMARK in VERTMARKS
					      until (ILESSP VERTMARK Y)
					      finally (SETQ NEWROWPROP ROWPROP)
							(SETQ NEWVERTMARK VERTMARK))
					   (bind (X ←(fetch XCOORD of CURSOR)) for COLUMNPROP
					      on COLUMNPROPS as HORZMARK in HORZMARKS
					      until (IGREATERP HORZMARK X)
					      finally (SETQ NEWCOLUMNPROP COLUMNPROP)
							(SETQ NEWHORZMARK HORZMARK))
					   (if (AND NEWROWPROP NEWCOLUMNPROP)
					       then (SETQ NEWELTWIDTH (PLSTRINGWIDTH
							  (APPLY* FETCHFN DATUM (CAR NEWROWPROP)
								    (CAR NEWCOLUMNPROP))
							  WINDOW))
						      (SETQ NEWELTLEFT (ADD1 (IDIFFERENCE
										   NEWHORZMARK 
										   NEWELTWIDTH)))
                                                             (* Select the new region only if the cursor is inside 
							     the element box)
						      (if (ILESSP (fetch XCOORD of CURSOR)
								      NEWELTLEFT)
							  then (SETQ NEWROWPROP NIL)
								 (SETQ NEWCOLUMNPROP NIL)))
					   (if (OR (NEQ NEWROWPROP SELECTEDROWPROP)
						       (NEQ NEWCOLUMNPROP SELECTEDCOLUMNPROP))
					       then        (* We need to consider highlighting a new region)
						      (if (AND SELECTEDROWPROP SELECTEDCOLUMNPROP)
							  then 
                                                             (* Lowlight the old region)
								 (TWODINSPECT.INVERTREGION 
										  SELECTEDELTLEFT 
										SELECTEDELTBOTTOM 
										 SELECTEDELTWIDTH 
											  FHEIGHT 
											   WINDOW)
								 (SETQ SELECTEDROWPROP NIL)
								 (SETQ SELECTEDCOLUMNPROP NIL))
						      (if (AND NEWROWPROP NEWCOLUMNPROP)
							  then 
                                                             (* cursor inside element box, highlight that box)
								 (TWODINSPECT.INVERTREGION 
										       NEWELTLEFT 
										      NEWVERTMARK 
										      NEWELTWIDTH 
											  FHEIGHT 
											   WINDOW)
								 (SETQ SELECTEDROWPROP NEWROWPROP)
								 (SETQ SELECTEDCOLUMNPROP 
								   NEWCOLUMNPROP)
								 (SETQ SELECTEDELTWIDTH NEWELTWIDTH)
								 (SETQ SELECTEDELTLEFT NEWELTLEFT)
								 (SETQ SELECTEDELTBOTTOM 
								   NEWVERTMARK)))
				      finally (if (AND SELECTEDROWPROP SELECTEDCOLUMNPROP)
						    then (WINDOWPROP WINDOW (QUOTE SELECTION)
									 (create 
									    TWODINSPECT.SELECTION
										   ROWPROP ← 
										  SELECTEDROWPROP
										   COLUMNPROP ← 
									       SELECTEDCOLUMNPROP
										   ELTWIDTH ← 
										 SELECTEDELTWIDTH
										   ELTLEFT ← 
										  SELECTEDELTLEFT
										   ELTBOTTOM ← 
										SELECTEDELTBOTTOM))
						  else (WINDOWPROP WINDOW (QUOTE SELECTION)
								       NIL]
	      else                                         (* MOUSESTATE MIDDLE)
		     (if SELECTION
			 then (APPLY* (WINDOWPROP WINDOW (QUOTE VALUECOMMANDFN))
					  (APPLY* FETCHFN DATUM (CAR SELECTEDROWPROP)
						    (CAR SELECTEDCOLUMNPROP))
					  (CAR SELECTEDROWPROP)
					  (CAR SELECTEDCOLUMNPROP)
					  DATUM WINDOW])

(TWODINSPECT.DEFAULT.VALUECOMMANDFN
  [LAMBDA (VALUE ROWPROP COLUMNPROP DATUM WINDOW)            (* jop: "10-Oct-85 20:47")

          (* *)


    (PROG [[SETMENU (CONSTANT (create MENU
					    ITEMS ←(QUOTE (("IT ← Selection" (QUOTE IT)
									       
						     "Bind IT to the value of the selected entry")
							      (Set (QUOTE SET)
								   "Set the selected entry"]
	     (INSPECTMENU (CONSTANT (create MENU
						ITEMS ←(QUOTE ((Inspect (QUOTE INSPECT)
									  
							"Inspect the value of the selected entry")
								  ("IT ← Selection" (QUOTE IT)
										    
						     "Bind IT to the value of the selected entry")
								  (Set (QUOTE SET)
								       "Set the selected entry"]
	    (SELECTQ (if (OR (NULL VALUE)
				   (NUMBERP VALUE))
			   then (MENU SETMENU)
			 else (MENU INSPECTMENU))
		       (INSPECT (INSPECT VALUE))
		       (IT (SETQ IT VALUE)
			   (RESETLST [RESETSAVE (PRINTLEVEL (QUOTE (2 . 5]
				       (RESETSAVE PLVLFILEFLG T)
				       (RESETSAVE *PRINT-ARRAY* NIL)
				       (PROMPTPRINT "IT bound to " IT)))
		       (SET (TWODINSPECT.SETELT ROWPROP COLUMNPROP WINDOW))
		       NIL])

(TWODINSPECT.DOWINDOWCOMFN
  [LAMBDA (TWODWINDOW)                                       (* jop: "25-Jul-85 16:48")

          (* * Pass on the usual comms, except for SHAPEW)


    (PROG (COM)
          (SETQ COM (MENU WindowMenu))
          (SELECTQ COM
		   (NIL NIL)
		   [SHAPEW (SHAPEW TWODWINDOW (GETREGION NIL NIL NIL (FUNCTION ICMLARRAY.GETREGIONFN)
							 (CONS TWODWINDOW (QUOTE CLOSED]
		   ((MOVEW CLOSEW SHRINKW BURYW)
		     (APPLY* COM (MAINWINDOW TWODWINDOW)))
		   (APPLY* COM TWODWINDOW])

(TWODINSPECT.MAKEREGIONS
  [LAMBDA (WINDOW)                                           (* jop: "29-Sep-85 17:55")

          (* * Sets up windowprops and activeregions)


    (PROG ((ROWPROPS (WINDOWPROP WINDOW (QUOTE ROWPROPS)))
	   (COLUMNPROPS (WINDOWPROP WINDOW (QUOTE COLUMNPROPS)))
	   (COLUMNWIDTHS (WINDOWPROP WINDOW (QUOTE COLUMNWIDTHS)))
	   (SPACE (STRINGWIDTH (WINDOWPROP WINDOW (QUOTE COLUMNPROPSPACE))
			       WINDOW))
	   (WINDOWHEIGHT (WINDOWPROP WINDOW (QUOTE HEIGHT)))
	   (LF (DSPLINEFEED NIL WINDOW))
	   VERTMARKS HORZMARKS)
          (if (NULL COLUMNWIDTHS)
	      then (SETQ COLUMNWIDTHS (TWODINSPECT.COLUMNWIDTHS (WINDOWPROP WINDOW (QUOTE DATUM))
								ROWPROPS COLUMNPROPS
								(WINDOWPROP WINDOW (QUOTE FETCHFN))
								WINDOW))
		   (WINDOWPROP WINDOW (QUOTE COLUMNWIDTHS)
			       COLUMNWIDTHS))                (* VERTMARKS and HORZMARKS mark endpoints)
          (SETQ VERTMARKS (for I from 1 to (LENGTH ROWPROPS) as MARK from (IPLUS WINDOWHEIGHT LF)
			     by LF collect MARK))
          [SETQ HORZMARKS (bind (MARK ← -1) for I from 1 to (LENGTH COLUMNPROPS) as COLUMNWIDTH
			     in COLUMNWIDTHS collect (SETQ MARK (IPLUS MARK SPACE COLUMNWIDTH]
          (WINDOWPROP WINDOW (QUOTE VERTMARKS)
		      VERTMARKS)
          (WINDOWPROP WINDOW (QUOTE HORZMARKS)
		      HORZMARKS)
          [WINDOWPROP WINDOW (QUOTE EXTENT)
		      (CREATEREGION 0 (CAR (LAST VERTMARKS))
				    (CAR (LAST HORZMARKS))
				    (DIFFERENCE WINDOWHEIGHT (CAR (LAST VERTMARKS]
          [WINDOWPROP (WINDOWPROP WINDOW (QUOTE TOPWINDOW))
		      (QUOTE EXTENT)
		      (CREATEREGION 0 0 (CAR (LAST HORZMARKS))
				    (WINDOWPROP (WINDOWPROP WINDOW (QUOTE TOPWINDOW))
						(QUOTE HEIGHT]
          (WINDOWPROP (WINDOWPROP WINDOW (QUOTE RIGHTWINDOW))
		      (QUOTE EXTENT)
		      (CREATEREGION 0 (CAR (LAST VERTMARKS))
				    (WINDOWPROP (WINDOWPROP WINDOW (QUOTE RIGHTWINDOW))
						(QUOTE WIDTH))
				    (DIFFERENCE WINDOWHEIGHT (CAR (LAST VERTMARKS])

(TWODINSPECT.PRINTELEMENT
  [LAMBDA (ELT RIGHT BOTTOM FDESCENT WINDOW)                 (* jop: " 1-Oct-85 22:35")

          (* *)


    (MOVETO (ADD1 (DIFFERENCE RIGHT (PLSTRINGWIDTH ELT WINDOW)))
	    (IPLUS BOTTOM FDESCENT)
	    WINDOW)
    (PRINTOUT WINDOW ELT])

(TWODINSPECT.REDISPLAY
  [LAMBDA (WINDOW ELTROWPROPS ELTCOLUMNPROPS)                (* jop: "31-Dec-00 19:44")

          (* * ELTROWPROPS and ELTCOLUMNPROPS may be single entries, lists, or NIL. If NIL than the whole inspector is 
	  refetched and redisplayed)


    (if (AND ELTROWPROPS (NLISTP ELTROWPROPS))
	then (SETQ ELTROWPROPS (LIST ELTROWPROPS)))
    (if (AND ELTCOLUMNPROPS (NLISTP ELTCOLUMNPROPS))
	then (SETQ ELTCOLUMNPROPS (LIST ELTCOLUMNPROPS)))
    (RESETLST [RESETSAVE (PRINTLEVEL (QUOTE (2 . 5]
		(RESETSAVE PLVLFILEFLG T)
		(RESETSAVE *PRINT-ARRAY* NIL)
		(PROG ((FETCHFN (WINDOWPROP WINDOW (QUOTE FETCHFN)))
			 (DATUM (WINDOWPROP WINDOW (QUOTE DATUM)))
			 (VERTMARKS (WINDOWPROP WINDOW (QUOTE VERTMARKS)))
			 (HORZMARKS (WINDOWPROP WINDOW (QUOTE HORZMARKS)))
			 (ROWPROPS (WINDOWPROP WINDOW (QUOTE ROWPROPS)))
			 (COLUMNPROPS (WINDOWPROP WINDOW (QUOTE COLUMNPROPS)))
			 (COLUMNWIDTHS (WINDOWPROP WINDOW (QUOTE COLUMNWIDTHS)))
			 (SELECTION (WINDOWPROP WINDOW (QUOTE SELECTION)))
			 ELTCOLUMNWIDTHS ELTS ELTRIGHTS ELTBOTTOMS)
		        [SETQ ELTS (for RPROP in ELTROWPROPS
					join (for CPROP in ELTCOLUMNPROPS
						  collect (APPLY* FETCHFN DATUM RPROP CPROP]
		        [SETQ ELTCOLUMNWIDTHS
			  (for RPROP in ELTROWPROPS
			     join (for CPROP in ELTCOLUMNPROPS
				       collect (for COLWIDTH in COLUMNWIDTHS as COLPROP
						    in COLUMNPROPS thereis (EQUAL COLPROP CPROP]
		        [SETQ ELTRIGHTS
			  (for RPROP in ELTROWPROPS
			     join (for CPROP in ELTCOLUMNPROPS
				       collect (for HMARK in HORZMARKS as COLPROP
						    in COLUMNPROPS thereis (EQUAL COLPROP CPROP]
		        [SETQ ELTBOTTOMS
			  (for RPROP in ELTROWPROPS
			     join (for CPROP in ELTCOLUMNPROPS
				       collect (for VMARK in VERTMARKS as ROWPROP
						    in ROWPROPS thereis (EQUAL ROWPROP RPROP]
		        (if (AND ELTS (for ELT in ELTS as COLUMNWIDTH in ELTCOLUMNWIDTHS
					     never (IGREATERP (PLSTRINGWIDTH ELT WINDOW)
								  COLUMNWIDTH)))
			    then (TWODINSPECT.INVERTSELECTION WINDOW)
				   (bind (FHEIGHT ←(FONTPROP WINDOW (QUOTE HEIGHT)))
					   (FDESCENT ←(FONTPROP WINDOW (QUOTE DESCENT)))
				      for ELT in ELTS as RIGHT in ELTRIGHTS as BOTTOM
				      in ELTBOTTOMS as COLUMNWIDTH in ELTCOLUMNWIDTHS
				      do (BITBLT NIL NIL NIL WINDOW (IDIFFERENCE (ADD1 RIGHT)
										       COLUMNWIDTH)
						     BOTTOM COLUMNWIDTH FHEIGHT (QUOTE TEXTURE)
						     (QUOTE REPLACE)
						     WHITESHADE)
					   (TWODINSPECT.PRINTELEMENT ELT RIGHT BOTTOM FDESCENT 
								       WINDOW))
				   (TWODINSPECT.ADJUSTSELECTION WINDOW)
				   (TWODINSPECT.INVERTSELECTION WINDOW)
			  else                             (* Recompute the whole picture)
				 (WINDOWPROP WINDOW (QUOTE COLUMNWIDTHS)
					       NIL)
				 (TWODINSPECT.MAKEREGIONS WINDOW)
				 (TWODINSPECT.ADJUSTSELECTION WINDOW)
				 (DSPRESET WINDOW)
				 (TWODINSPECT.REPAINTFN WINDOW)
				 (DSPRESET (WINDOWPROP WINDOW (QUOTE TOPWINDOW)))
				 (TWODINSPECT.TOPW.REPAINTFN (WINDOWPROP WINDOW (QUOTE 
											TOPWINDOW)))
				 (DSPRESET (WINDOWPROP WINDOW (QUOTE RIGHTWINDOW)))
				 (TWODINSPECT.RIGHTW.REPAINTFN (WINDOWPROP WINDOW (QUOTE 
										      RIGHTWINDOW])

(TWODINSPECT.INVERTSELECTION
  [LAMBDA (WINDOW)                                           (* jop: "29-Sep-85 17:37")

          (* * Inverts SELECTION if non-NIL)


    (PROG [(SELECTION (WINDOWPROP WINDOW (QUOTE SELECTION]
          (if SELECTION
	      then (TWODINSPECT.INVERTREGION (fetch (TWODINSPECT.SELECTION ELTLEFT) of SELECTION)
					     (fetch (TWODINSPECT.SELECTION ELTBOTTOM) of SELECTION)
					     (fetch (TWODINSPECT.SELECTION ELTWIDTH) of SELECTION)
					     (FONTPROP WINDOW (QUOTE HEIGHT))
					     WINDOW])

(TWODINSPECT.ADJUSTCOLUMNSELECTION
  [LAMBDA (WINDOW)                                           (* jop: "30-Sep-85 22:00")
    (PROG ((SELECTION (WINDOWPROP WINDOW (QUOTE SELECTION)))
	   (MAINWINDOW (MAINWINDOW WINDOW)))
          (if SELECTION
	      then (RESETLST [RESETSAVE (PRINTLEVEL (QUOTE (2 . 5]
			     (RESETSAVE *PRINT-ARRAY* NIL)
			     (PROG ((COLUMNPROPS (WINDOWPROP MAINWINDOW (QUOTE COLUMNPROPS)))
				    (HORZMARKS (WINDOWPROP MAINWINDOW (QUOTE HORZMARKS)))
				    (SELCOLPROP (fetch (TWODINSPECT.SELECTION COLUMNPROP)
						   of SELECTION))
				    SELBOTTOM SELWIDTH SELLEFT)
			           (SETQ SELBOTTOM 0)
			           (SETQ SELWIDTH (PLSTRINGWIDTH (CAR SELCOLPROP)
								 WINDOW))
			           (SETQ SELLEFT
				     (IDIFFERENCE (ADD1 (for HMARK in HORZMARKS as COLPROP
							   on COLUMNPROPS thereis (EQ COLPROP 
										      SELCOLPROP)))
						  SELWIDTH))
			           (WINDOWPROP WINDOW (QUOTE SELECTION)
					       (create TWODINSPECT.SELECTION
						       COLUMNPROP ← SELCOLPROP
						       ELTBOTTOM ← SELBOTTOM
						       ELTWIDTH ← SELWIDTH
						       ELTLEFT ← SELLEFT])

(TWODINSPECT.ADJUSTROWSELECTION
  [LAMBDA (WINDOW)                                           (* jop: "30-Sep-85 22:00")
    (PROG ((SELECTION (WINDOWPROP WINDOW (QUOTE SELECTION)))
	   (MAINWINDOW (MAINWINDOW WINDOW)))
          (if SELECTION
	      then (RESETLST [RESETSAVE (PRINTLEVEL (QUOTE (2 . 5]
			     (RESETSAVE *PRINT-ARRAY* NIL)
			     (PROG ((ROWPROPSPACE (WINDOWPROP MAINWINDOW (QUOTE ROWPROPSPACE)))
				    (ROWPROPS (WINDOWPROP MAINWINDOW (QUOTE ROWPROPS)))
				    (VERTMARKS (WINDOWPROP MAINWINDOW (QUOTE VERTMARKS)))
				    (SELROWPROP (fetch (TWODINSPECT.SELECTION ROWPROP) of SELECTION))
				    SELBOTTOM SELWIDTH SELLEFT)
			           (SETQ SELBOTTOM (for VMARK in VERTMARKS as ROWPROP on ROWPROPS
						      thereis (EQ ROWPROP SELROWPROP)))
			           (SETQ SELWIDTH (PLSTRINGWIDTH (CAR SELROWPROP)
								 WINDOW))
			           (SETQ SELLEFT (STRINGWIDTH ROWPROPSPACE WINDOW))
			           (WINDOWPROP WINDOW (QUOTE SELECTION)
					       (create TWODINSPECT.SELECTION
						       ROWPROP ← SELROWPROP
						       ELTBOTTOM ← SELBOTTOM
						       ELTWIDTH ← SELWIDTH
						       ELTLEFT ← SELLEFT])

(TWODINSPECT.ADJUSTSELECTION
  [LAMBDA (WINDOW)                                           (* jop: "30-Sep-85 21:53")
    (PROG [(SELECTION (WINDOWPROP WINDOW (QUOTE SELECTION]
          (if SELECTION
	      then (RESETLST [RESETSAVE (PRINTLEVEL (QUOTE (2 . 5]
			     (RESETSAVE *PRINT-ARRAY* NIL)
			     (PROG ((DATUM (WINDOWPROP WINDOW (QUOTE DATUM)))
				    (FETCHFN (WINDOWPROP WINDOW (QUOTE FETCHFN)))
				    (ROWPROPS (WINDOWPROP WINDOW (QUOTE ROWPROPS)))
				    (COLUMNPROPS (WINDOWPROP WINDOW (QUOTE COLUMNPROPS)))
				    (VERTMARKS (WINDOWPROP WINDOW (QUOTE VERTMARKS)))
				    (HORZMARKS (WINDOWPROP WINDOW (QUOTE HORZMARKS)))
				    (SELROWPROP (fetch (TWODINSPECT.SELECTION ROWPROP) of SELECTION))
				    (SELCOLPROP (fetch (TWODINSPECT.SELECTION COLUMNPROP)
						   of SELECTION))
				    SELBOTTOM SELWIDTH SELLEFT)
			           (SETQ SELBOTTOM (for VMARK in VERTMARKS as ROWPROP on ROWPROPS
						      thereis (EQ ROWPROP SELROWPROP)))
			           (SETQ SELWIDTH (PLSTRINGWIDTH (APPLY* FETCHFN DATUM (CAR 
										       SELROWPROP)
									 (CAR SELCOLPROP))
								 WINDOW))
			           (SETQ SELLEFT
				     (IDIFFERENCE (ADD1 (for HMARK in HORZMARKS as COLPROP
							   on COLUMNPROPS thereis (EQ COLPROP 
										      SELCOLPROP)))
						  SELWIDTH))
			           (WINDOWPROP WINDOW (QUOTE SELECTION)
					       (create TWODINSPECT.SELECTION
						       ROWPROP ← SELROWPROP
						       COLUMNPROP ← SELCOLPROP
						       ELTBOTTOM ← SELBOTTOM
						       ELTWIDTH ← SELWIDTH
						       ELTLEFT ← SELLEFT])

(TWODINSPECT.REPAINTFN
  [LAMBDA (WINDOW WINDOWREGION)                              (* jop: " 2-Oct-85 00:11")
    (if (NULL WINDOWREGION)
	then (SETQ WINDOWREGION (DSPCLIPPINGREGION NIL WINDOW)))
    (RESETLST [RESETSAVE (PRINTLEVEL (QUOTE (2 . 5]
	      (RESETSAVE PLVLFILEFLG T)
	      (RESETSAVE *PRINT-ARRAY* NIL)
	      (PROG ((TOP (fetch TOP of WINDOWREGION))
		     (BOTTOM (fetch BOTTOM of WINDOWREGION))
		     (LEFT (fetch LEFT of WINDOWREGION))
		     (RIGHT (fetch RIGHT of WINDOWREGION))
		     (FETCHFN (WINDOWPROP WINDOW (QUOTE FETCHFN)))
		     (DATUM (WINDOWPROP WINDOW (QUOTE DATUM)))
		     (VERTMARKS (WINDOWPROP WINDOW (QUOTE VERTMARKS)))
		     (HORZMARKS (WINDOWPROP WINDOW (QUOTE HORZMARKS)))
		     (ROWPROPS (WINDOWPROP WINDOW (QUOTE ROWPROPS)))
		     (COLUMNPROPS (WINDOWPROP WINDOW (QUOTE COLUMNPROPS)))
		     STARTROWPROPS LASTROWPROP STARTCOLUMNPROPS LASTCOLUMNPROP STARTVERTMARKS 
		     STARTHORZMARKS)
		    (for ROWPROP on ROWPROPS as MARK on VERTMARKS until (ILESSP (CAR MARK)
										TOP)
		       finally (SETQ STARTROWPROPS ROWPROP)
			       (SETQ STARTVERTMARKS MARK))
		    (for ROWPROP on STARTROWPROPS as MARK in STARTVERTMARKS until (ILESSP MARK BOTTOM)
		       finally (SETQ LASTROWPROP ROWPROP))
		    (for COLUMNPROP on COLUMNPROPS as MARK on HORZMARKS until (IGREATERP
										(CAR MARK)
										LEFT)
		       finally (SETQ STARTCOLUMNPROPS COLUMNPROP)
			       (SETQ STARTHORZMARKS MARK))
		    (for COLUMNPROP on STARTCOLUMNPROPS as MARK in STARTHORZMARKS
		       until (IGREATERP MARK RIGHT) finally (SETQ LASTCOLUMNPROP COLUMNPROP))
		    [if (AND STARTROWPROPS STARTCOLUMNPROPS)
			then (for ROWPROP on STARTROWPROPS as VMARK in STARTVERTMARKS
				repeatuntil (EQ ROWPROP LASTROWPROP)
				do (bind (FDESCENT ←(FONTPROP WINDOW (QUOTE DESCENT))) for COLUMNPROP
				      on STARTCOLUMNPROPS as HMARK in STARTHORZMARKS
				      repeatuntil (EQ COLUMNPROP LASTCOLUMNPROP)
				      do (TWODINSPECT.PRINTELEMENT (APPLY* FETCHFN DATUM
									   (CAR ROWPROP)
									   (CAR COLUMNPROP))
								   HMARK VMARK FDESCENT WINDOW]
		    (TWODINSPECT.INVERTSELECTION WINDOW])

(TWODINSPECT.RESHAPEFN
  [LAMBDA (WINDOW)                                           (* jop: " 6-Oct-85 18:33")
    (CLEARW WINDOW)
    (PROG [(SELECTION (WINDOWPROP WINDOW (QUOTE SELECTION]
	    (TWODINSPECT.MAKEREGIONS WINDOW)
	    (TWODINSPECT.ADJUSTSELECTION WINDOW)
	    (TWODINSPECT.REPAINTFN WINDOW])

(TWODINSPECT.ROWPROPWIDTH
  [LAMBDA (ROWPROPS FONT)                                    (* jop: "29-Sep-85 16:25")

          (* * Computes the MIN fieldwidth for the COLUMNPROP column of SLICE)


    (RESETLST [RESETSAVE (PRINTLEVEL (QUOTE (2 . 5]
	      (RESETSAVE *PRINT-ARRAY* NIL)
	      (PLSTRINGWIDTH (for ROWPROP in ROWPROPS largest (PLSTRINGWIDTH ROWPROP FONT))
			     FONT])

(TWODINSPECT.SCROLLFN
  [LAMBDA (WINDOW DX DY FLG)                                 (* jop: "18-Jul-85 13:50")
    (PROG [(TOPWINDOW (WINDOWPROP WINDOW (QUOTE TOPWINDOW)))
	   (RIGHTWINDOW (WINDOWPROP WINDOW (QUOTE RIGHTWINDOW]
          (if (OR (NOT (EQP 0 DX))
		  (FLOATP DX))
	      then (APPLY* (WINDOWPROP TOPWINDOW (QUOTE SCROLLFN))
			   TOPWINDOW DX 0 FLG))
          (if (OR (NOT (EQP 0 DY))
		  (FLOATP DY))
	      then (APPLY* (WINDOWPROP RIGHTWINDOW (QUOTE SCROLLFN))
			   RIGHTWINDOW 0 DY FLG))
          (SCROLLBYREPAINTFN WINDOW DX DY FLG])

(TWODINSPECT.SELECTCOLUMNPROP
  [LAMBDA (WINDOW COLUMNPROP)                                (* jop: "30-Sep-85 22:50")

          (* *)


    (PROG [(TOPWINDOW (WINDOWPROP WINDOW (QUOTE TOPWINDOW]
          (if (WINDOWPROP TOPWINDOW (QUOTE SELECTION))
	      then (TWODINSPECT.INVERTSELECTION TOPWINDOW))
          (RESETLST [RESETSAVE (PRINTLEVEL (QUOTE (2 . 5]
		    (RESETSAVE *PRINT-ARRAY* NIL)
		    (PROG ((COLUMNPROPS (WINDOWPROP WINDOW (QUOTE COLUMNPROPS)))
			   (HORZMARKS (WINDOWPROP WINDOW (QUOTE HORZMARKS)))
			   SELECTEDCOLUMNPROP SELECTEDELTBOTTOM SELECTEDELTLEFT SELECTEDELTWIDTH)
		          (SETQ SELECTEDCOLUMNPROP (for CPROP on COLUMNPROPS
						      thereis (EQUAL (CAR CPROP)
								     COLUMNPROP)))
		          (SETQ SELECTEDELTBOTTOM 0)
		          (SETQ SELECTEDELTWIDTH (PLSTRINGWIDTH (CAR SELECTEDCOLUMNPROP)
								WINDOW))
		          (SETQ SELECTEDELTLEFT
			    (IDIFFERENCE (ADD1 (for HMARK in HORZMARKS as CPROP on COLUMNPROPS
						  thereis (EQ CPROP SELECTEDCOLUMNPROP)))
					 SELECTEDELTWIDTH))
		          (TWODINSPECT.INVERTREGION SELECTEDELTLEFT SELECTEDELTBOTTOM 
						    SELECTEDELTWIDTH (FONTPROP WINDOW (QUOTE HEIGHT))
						    TOPWINDOW)
		          (WINDOWPROP TOPWINDOW (QUOTE SELECTION)
				      (create TWODINSPECT.SELECTION
					      COLUMNPROP ← SELECTEDCOLUMNPROP
					      ELTWIDTH ← SELECTEDELTWIDTH
					      ELTLEFT ← SELECTEDELTLEFT
					      ELTBOTTOM ← SELECTEDELTBOTTOM])

(TWODINSPECT.SELECTITEM
  [LAMBDA (WINDOW ROWPROP COLUMNPROP)                        (* jop: " 1-Oct-85 21:00")

          (* *)


    (if (WINDOWPROP WINDOW (QUOTE SELECTION))
	then (TWODINSPECT.INVERTSELECTION WINDOW))
    (if (AND ROWPROP COLUMNPROP)
	then (RESETLST [RESETSAVE (PRINTLEVEL (QUOTE (2 . 5]
		       (RESETSAVE *PRINT-ARRAY* NIL)
		       (PROG ((DATUM (WINDOWPROP WINDOW (QUOTE DATUM)))
			      (FETCHFN (WINDOWPROP WINDOW (QUOTE FETCHFN)))
			      (ROWPROPS (WINDOWPROP WINDOW (QUOTE ROWPROPS)))
			      (COLUMNPROPS (WINDOWPROP WINDOW (QUOTE COLUMNPROPS)))
			      (VERTMARKS (WINDOWPROP WINDOW (QUOTE VERTMARKS)))
			      (HORZMARKS (WINDOWPROP WINDOW (QUOTE HORZMARKS)))
			      SELECTEDROWPROP SELECTEDCOLUMNPROP SELECTEDELTBOTTOM SELECTEDELTLEFT 
			      SELECTEDELTWIDTH)
			     (SETQ SELECTEDROWPROP (for RPROP on ROWPROPS thereis
									   (EQUAL (CAR RPROP)
										  ROWPROP)))
			     (SETQ SELECTEDCOLUMNPROP (for CPROP on COLUMNPROPS
							 thereis (EQUAL (CAR CPROP)
									COLUMNPROP)))
			     (SETQ SELECTEDELTBOTTOM (for VMARK in VERTMARKS as RPROP on ROWPROPS
							thereis (EQ RPROP SELECTEDROWPROP)))
			     (SETQ SELECTEDELTWIDTH (PLSTRINGWIDTH (APPLY* FETCHFN DATUM ROWPROP 
									   COLUMNPROP)
								   WINDOW))
			     (SETQ SELECTEDELTLEFT
			       (IDIFFERENCE (ADD1 (for HMARK in HORZMARKS as CPROP on COLUMNPROPS
						     thereis (EQ CPROP SELECTEDCOLUMNPROP)))
					    SELECTEDELTWIDTH))
			     (TWODINSPECT.INVERTREGION SELECTEDELTLEFT SELECTEDELTBOTTOM 
						       SELECTEDELTWIDTH (FONTPROP WINDOW
										  (QUOTE HEIGHT))
						       WINDOW)
			     (WINDOWPROP WINDOW (QUOTE SELECTION)
					 (create TWODINSPECT.SELECTION
						 ROWPROP ← SELECTEDROWPROP
						 COLUMNPROP ← SELECTEDCOLUMNPROP
						 ELTWIDTH ← SELECTEDELTWIDTH
						 ELTLEFT ← SELECTEDELTLEFT
						 ELTBOTTOM ← SELECTEDELTBOTTOM])

(TWODINSPECT.SELECTROWPROP
  [LAMBDA (WINDOW ROWPROP)                                   (* jop: "30-Sep-85 22:48")

          (* *)


    (PROG [(RIGHTWINDOW (WINDOWPROP WINDOW (QUOTE RIGHTWINDOW]
          (if (WINDOWPROP RIGHTWINDOW (QUOTE SELECTION))
	      then (TWODINSPECT.INVERTSELECTION RIGHTWINDOW))
          (RESETLST [RESETSAVE (PRINTLEVEL (QUOTE (2 . 5]
		    (RESETSAVE *PRINT-ARRAY* NIL)
		    (PROG ((ROWPROPSPACE (WINDOWPROP WINDOW (QUOTE ROWPROPSPACE)))
			   (ROWPROPS (WINDOWPROP WINDOW (QUOTE ROWPROPS)))
			   (VERTMARKS (WINDOWPROP WINDOW (QUOTE VERTMARKS)))
			   SELECTEDROWPROP SELECTEDELTBOTTOM SELECTEDELTLEFT SELECTEDELTWIDTH)
		          (SETQ SELECTEDROWPROP (for RPROP on ROWPROPS thereis (EQUAL (CAR RPROP)
										      ROWPROP)))
		          (SETQ SELECTEDELTBOTTOM (for VMARK in VERTMARKS as RPROP on ROWPROPS
						     thereis (EQ RPROP SELECTEDROWPROP)))
		          (SETQ SELECTEDELTWIDTH (PLSTRINGWIDTH (CAR SELECTEDROWPROP)
								WINDOW))
		          (SETQ SELECTEDELTLEFT (STRINGWIDTH ROWPROPSPACE WINDOW))
		          (TWODINSPECT.INVERTREGION SELECTEDELTLEFT SELECTEDELTBOTTOM 
						    SELECTEDELTWIDTH (FONTPROP WINDOW (QUOTE HEIGHT))
						    RIGHTWINDOW)
		          (WINDOWPROP RIGHTWINDOW (QUOTE SELECTION)
				      (create TWODINSPECT.SELECTION
					      ROWPROP ← SELECTEDROWPROP
					      ELTWIDTH ← SELECTEDELTWIDTH
					      ELTLEFT ← SELECTEDELTLEFT
					      ELTBOTTOM ← SELECTEDELTBOTTOM])

(TWODINSPECT.SETELT
  [LAMBDA (ROWPROP COLUMNPROP WINDOW)                        (* jop: "30-Sep-85 20:45")

          (* *)


    (PROG ((PRTWINDOW (GETPROMPTWINDOW WINDOW))
	   NEWVALUE)
          [RESETFORM (SET.TTYINEDIT.WINDOW PRTWINDOW)
		     (SETQ NEWVALUE (EVAL (CAR (TTYIN "NEWVALUE? " NIL NIL (QUOTE EVALQT)
						      NIL NIL NIL T]
          (REMOVEPROMPTWINDOW WINDOW)
          (TWODINSPECT.REPLACE WINDOW ROWPROP COLUMNPROP NEWVALUE])

(TWODINSPECT.REPLACE
  [LAMBDA (WINDOW ROWPROP COLUMNPROP NEWVALUE)               (* jop: "30-Sep-85 20:44")
    (PROG [(DATUM (WINDOWPROP WINDOW (QUOTE DATUM)))
	   (STOREFN (WINDOWPROP WINDOW (QUOTE STOREFN]
          (APPLY* STOREFN NEWVALUE DATUM ROWPROP COLUMNPROP)
          (TWODINSPECT.REDISPLAY WINDOW ROWPROP COLUMNPROP])

(TWODINSPECT.RIGHTW.BUTTONEVENTFN
  [LAMBDA (WINDOW)                                           (* jop: " 1-Oct-85 23:59")

          (* *)


    (TOTOPW WINDOW)
    (PROG ((MAINWINDOW (MAINWINDOW WINDOW))
	     (SELECTION (WINDOWPROP WINDOW (QUOTE SELECTION)))
	     ROWPROPS ROWPROPCOMMANDFN VERTMARKS SELECTEDROWPROP SELECTEDELTBOTTOM SELECTEDELTLEFT 
	     SELECTEDELTWIDTH DATUM)
	    (SETQ ROWPROPS (WINDOWPROP MAINWINDOW (QUOTE ROWPROPS)))
	    (SETQ VERTMARKS (WINDOWPROP MAINWINDOW (QUOTE VERTMARKS)))
	    (SETQ ROWPROPCOMMANDFN (WINDOWPROP MAINWINDOW (QUOTE ROWPROPCOMMANDFN)))
	    (SETQ DATUM (WINDOWPROP MAINWINDOW (QUOTE DATUM)))
	    (if ROWPROPCOMMANDFN
		then (if SELECTION
			   then (SETQ SELECTEDROWPROP (fetch (TWODINSPECT.SELECTION ROWPROP)
							     of SELECTION))
				  (SETQ SELECTEDELTBOTTOM (fetch (TWODINSPECT.SELECTION ELTBOTTOM)
							       of SELECTION))
				  (SETQ SELECTEDELTLEFT (fetch (TWODINSPECT.SELECTION ELTLEFT)
							     of SELECTION))
				  (SETQ SELECTEDELTWIDTH (fetch (TWODINSPECT.SELECTION ELTWIDTH)
							      of SELECTION)))
		       (if (MOUSESTATE LEFT)
			   then [RESETLST [RESETSAVE (PRINTLEVEL (QUOTE (2 . 5]
					      (RESETSAVE *PRINT-ARRAY* NIL)
					      (bind (FHEIGHT ←(FONTPROP WINDOW (QUOTE HEIGHT)))
						      (NEWELTLEFT ←(STRINGWIDTH
								    (WINDOWPROP MAINWINDOW
										  (QUOTE 
										     ROWPROPSPACE))
								    WINDOW))
						      CURSOR NEWROWPROP NEWVERTMARK NEWELTWIDTH
						 repeatwhile (MOUSESTATE LEFT)
						 do (SETQ CURSOR (CURSORPOSITION NIL WINDOW))
						      (bind (Y ←(fetch YCOORD of CURSOR))
							 for ROWPROP on ROWPROPS as VMARK
							 in VERTMARKS until (ILESSP VMARK Y)
							 finally (SETQ NEWROWPROP ROWPROP)
								   (SETQ NEWVERTMARK VMARK))
						      (if NEWROWPROP
							  then (SETQ NEWELTWIDTH
								   (PLSTRINGWIDTH (CAR NEWROWPROP)
										    WINDOW)))
                                                             (* Select the new region only if the cursor is inside 
							     the element box)
						      (if [AND NEWROWPROP
								   (OR (ILESSP (fetch XCOORD
										      of CURSOR)
										   NEWELTLEFT)
									 (IGREATERP (fetch XCOORD
											 of CURSOR)
										      (IPLUS 
										       NEWELTLEFT 
										      NEWELTWIDTH]
							  then (SETQ NEWROWPROP NIL))
						      (if (NEQ NEWROWPROP SELECTEDROWPROP)
							  then 
                                                             (* We need to consider highlighting a new region)
								 (if SELECTEDROWPROP
								     then 
                                                             (* Lowlight the old region)
									    (
									 TWODINSPECT.INVERTREGION
									      SELECTEDELTLEFT 
									      SELECTEDELTBOTTOM 
									      SELECTEDELTWIDTH 
									      FHEIGHT WINDOW)
									    (SETQ SELECTEDROWPROP 
									      NIL))
								 (if NEWROWPROP
								     then 
                                                             (* cursor inside element box, highlight that box)
									    (
									 TWODINSPECT.INVERTREGION
									      NEWELTLEFT NEWVERTMARK 
									      NEWELTWIDTH FHEIGHT 
									      WINDOW)
									    (SETQ SELECTEDROWPROP 
									      NEWROWPROP)
									    (SETQ SELECTEDELTWIDTH 
									      NEWELTWIDTH)
									    (SETQ SELECTEDELTLEFT 
									      NEWELTLEFT)
									    (SETQ SELECTEDELTBOTTOM 
									      NEWVERTMARK)))
						 finally (if SELECTEDROWPROP
							       then (WINDOWPROP WINDOW
										    (QUOTE 
											SELECTION)
										    (create 
									    TWODINSPECT.SELECTION
											      ROWPROP 
											      ← 
										  SELECTEDROWPROP
											      
											 ELTWIDTH ← 
										 SELECTEDELTWIDTH
											      ELTLEFT 
											      ← 
										  SELECTEDELTLEFT
											      
											ELTBOTTOM ← 
										SELECTEDELTBOTTOM))
							     else (WINDOWPROP WINDOW
										  (QUOTE SELECTION)
										  NIL]
			 else                              (* MOUSESTATE MIDDLE)
				(if SELECTION
				    then (APPLY* ROWPROPCOMMANDFN (CAR SELECTEDROWPROP)
						     DATUM MAINWINDOW])

(TWODINSPECT.RIGHTW.REPAINTFN
  [LAMBDA (WINDOW WINDOWREGION)                              (* jop: " 1-Oct-85 22:37")
    (if (NULL WINDOWREGION)
	then (SETQ WINDOWREGION (DSPCLIPPINGREGION NIL WINDOW)))
    (PROG ((DISPLAYW (MAINWINDOW WINDOW))
	   (TOP (fetch TOP of WINDOWREGION))
	   (BOTTOM (fetch BOTTOM of WINDOWREGION))
	   VERTMARKS ROWPROPS SPACE STARTROWPROPS LASTROWPROP STARTVERTMARKS)
          (SETQ VERTMARKS (WINDOWPROP DISPLAYW (QUOTE VERTMARKS)))
          (SETQ ROWPROPS (WINDOWPROP DISPLAYW (QUOTE ROWPROPS)))
          (SETQ SPACE (STRINGWIDTH (WINDOWPROP DISPLAYW (QUOTE ROWPROPSPACE))
				   WINDOW))
          (for ROWPROP on ROWPROPS as MARK on VERTMARKS until (ILESSP (CAR MARK)
								      TOP)
	     finally (SETQ STARTROWPROPS ROWPROP)
		     (SETQ STARTVERTMARKS MARK))
          (for ROWPROP on STARTROWPROPS as MARK in STARTVERTMARKS until (ILESSP MARK BOTTOM)
	     finally (SETQ LASTROWPROP ROWPROP))
          [if STARTROWPROPS
	      then (bind (FDESCENT ←(FONTPROP WINDOW (QUOTE DESCENT))) for ROWPROP on STARTROWPROPS
		      as VERTMARK in STARTVERTMARKS repeatuntil (EQ ROWPROP LASTROWPROP)
		      do (MOVETO SPACE (IPLUS VERTMARK FDESCENT)
				 WINDOW)
			 (PRINTOUT WINDOW (CAR ROWPROP]
          (TWODINSPECT.INVERTSELECTION WINDOW])

(TWODINSPECT.RIGHTW.RESHAPEFN
  [LAMBDA (WINDOW)                                           (* jop: " 6-Oct-85 18:35")
    (CLEARW WINDOW)
    (TWODINSPECT.ADJUSTROWSELECTION WINDOW)
    (TWODINSPECT.RIGHTW.REPAINTFN WINDOW (DSPCLIPPINGREGION NIL WINDOW])

(TWODINSPECT.TOPW.BUTTONEVENTFN
  [LAMBDA (WINDOW)                                           (* jop: "25-Nov-85 12:48")

          (* *)


    (TOTOPW WINDOW)
    (PROG ((MAINWINDOW (MAINWINDOW WINDOW))
	     (SELECTION (WINDOWPROP WINDOW (QUOTE SELECTION)))
	     COLUMNPROPS HORZMARKS SELECTEDCOLUMNPROP SELECTEDELTBOTTOM SELECTEDELTLEFT 
	     SELECTEDELTWIDTH COLUMNPROPCOMMANDFN)
	    (SETQ COLUMNPROPS (WINDOWPROP MAINWINDOW (QUOTE COLUMNPROPS)))
	    (SETQ HORZMARKS (WINDOWPROP MAINWINDOW (QUOTE HORZMARKS)))
	    (SETQ COLUMNPROPCOMMANDFN (WINDOWPROP MAINWINDOW (QUOTE COLUMNPROPCOMMANDFN)))
	    (if COLUMNPROPCOMMANDFN
		then (if SELECTION
			   then (SETQ SELECTEDCOLUMNPROP (fetch (TWODINSPECT.SELECTION 
										       COLUMNPROP)
								of SELECTION))
				  (SETQ SELECTEDELTBOTTOM (fetch (TWODINSPECT.SELECTION ELTBOTTOM)
							       of SELECTION))
				  (SETQ SELECTEDELTLEFT (fetch (TWODINSPECT.SELECTION ELTLEFT)
							     of SELECTION))
				  (SETQ SELECTEDELTWIDTH (fetch (TWODINSPECT.SELECTION ELTWIDTH)
							      of SELECTION)))
		       (if (MOUSESTATE LEFT)
			   then [RESETLST [RESETSAVE (PRINTLEVEL (QUOTE (2 . 5]
					      (RESETSAVE *PRINT-ARRAY* NIL)
					      (bind (FHEIGHT ←(FONTPROP WINDOW (QUOTE HEIGHT)))
						      X NEWCOLUMNPROP NEWHORZMARK NEWELTWIDTH 
						      NEWELTLEFT
						 repeatwhile (MOUSESTATE LEFT)
						 do (SETQ X (fetch XCOORD
								   of (CURSORPOSITION NIL WINDOW))
							)
						      (for COLUMNPROP on COLUMNPROPS
							 as HORZMARK in HORZMARKS
							 until (IGREATERP HORZMARK X)
							 finally (SETQ NEWCOLUMNPROP COLUMNPROP)
								   (SETQ NEWHORZMARK HORZMARK))
						      [if NEWCOLUMNPROP
							  then (SETQ NEWELTWIDTH
								   (PLSTRINGWIDTH (CAR 
										    NEWCOLUMNPROP)
										    WINDOW))
								 (SETQ NEWELTLEFT
								   (ADD1 (IDIFFERENCE NEWHORZMARK 
										      NEWELTWIDTH]
                                                             (* Select the new region only if the cursor is inside 
							     the element box)
						      (if (AND NEWCOLUMNPROP (ILESSP X 
										       NEWELTLEFT))
							  then (SETQ NEWCOLUMNPROP NIL))
						      (if (NEQ NEWCOLUMNPROP SELECTEDCOLUMNPROP)
							  then 
                                                             (* We need to consider highlighting a new region)
								 (if SELECTEDCOLUMNPROP
								     then 
                                                             (* Lowlight the old region)
									    (
									 TWODINSPECT.INVERTREGION
									      SELECTEDELTLEFT 
									      SELECTEDELTBOTTOM 
									      SELECTEDELTWIDTH 
									      FHEIGHT WINDOW)
									    (SETQ 
									      SELECTEDCOLUMNPROP NIL))
								 (if NEWCOLUMNPROP
								     then 
                                                             (* cursor inside element box, highlight that box)
									    (
									 TWODINSPECT.INVERTREGION
									      NEWELTLEFT 0 
									      NEWELTWIDTH FHEIGHT 
									      WINDOW)
									    (SETQ 
									      SELECTEDCOLUMNPROP 
									      NEWCOLUMNPROP)
									    (SETQ SELECTEDELTWIDTH 
									      NEWELTWIDTH)
									    (SETQ SELECTEDELTLEFT 
									      NEWELTLEFT)
									    (SETQ SELECTEDELTBOTTOM 
									      0)))
						 finally (if SELECTEDCOLUMNPROP
							       then (WINDOWPROP WINDOW
										    (QUOTE 
											SELECTION)
										    (create 
									    TWODINSPECT.SELECTION
											      
										       COLUMNPROP ← 
									       SELECTEDCOLUMNPROP
											      
											 ELTWIDTH ← 
										 SELECTEDELTWIDTH
											      ELTLEFT 
											      ← 
										  SELECTEDELTLEFT
											      
											ELTBOTTOM ← 
										SELECTEDELTBOTTOM))
							     else (WINDOWPROP WINDOW
										  (QUOTE SELECTION)
										  NIL]
			 else                              (* MOUSESTATE MIDDLE)
				(if SELECTION
				    then (APPLY* COLUMNPROPCOMMANDFN (CAR SELECTEDCOLUMNPROP)
						     (WINDOWPROP MAINWINDOW (QUOTE DATUM))
						     MAINWINDOW])

(TWODINSPECT.TOPW.REPAINTFN
  [LAMBDA (WINDOW WINDOWREGION)                              (* jop: "30-Sep-85 21:08")
    (if (NULL WINDOWREGION)
	then (SETQ WINDOWREGION (DSPCLIPPINGREGION NIL WINDOW)))
    (PROG ((DISPLAYW (MAINWINDOW WINDOW))
	   (LEFT (fetch LEFT of WINDOWREGION))
	   (RIGHT (fetch RIGHT of WINDOWREGION))
	   HORZMARKS COLUMNPROPS STARTCOLUMNPROPS LASTCOLUMNPROP STARTHORZMARKS)
          (SETQ HORZMARKS (WINDOWPROP DISPLAYW (QUOTE HORZMARKS)))
          (SETQ COLUMNPROPS (WINDOWPROP DISPLAYW (QUOTE COLUMNPROPS)))
          (for COLUMNPROP on COLUMNPROPS as MARK on HORZMARKS until (IGREATERP (CAR MARK)
									       LEFT)
	     finally (SETQ STARTCOLUMNPROPS COLUMNPROP)
		     (SETQ STARTHORZMARKS MARK))
          (for COLUMNPROP on STARTCOLUMNPROPS as MARK in STARTHORZMARKS until (IGREATERP MARK RIGHT)
	     finally (SETQ LASTCOLUMNPROP COLUMNPROP))
          [if STARTCOLUMNPROPS
	      then (bind [BOTTOM ←(SUB1 (FONTPROP WINDOW (QUOTE DESCENT] for COLUMNPROP on 
										 STARTCOLUMNPROPS
		      as HMARK in STARTHORZMARKS repeatuntil (EQ COLUMNPROP LASTCOLUMNPROP)
		      do (MOVETO (ADD1 (DIFFERENCE HMARK (STRINGWIDTH (CAR COLUMNPROP)
								      WINDOW)))
				 BOTTOM WINDOW)
			 (PRINTOUT WINDOW (CAR COLUMNPROP]
          (TWODINSPECT.INVERTSELECTION WINDOW])

(TWODINSPECT.TOPW.RESHAPEFN
  [LAMBDA (WINDOW)                                           (* jop: " 6-Oct-85 18:35")
    (CLEARW WINDOW)
    (TWODINSPECT.ADJUSTCOLUMNSELECTION WINDOW)
    (TWODINSPECT.TOPW.REPAINTFN WINDOW (DSPCLIPPINGREGION NIL WINDOW])

(TWODINSPECT.TOTALWIDTH
  [LAMBDA (COLUMNWIDTHS SPACE FONT)                          (* jop: "25-Sep-85 13:21")
    (IPLUS (ITIMES (LENGTH COLUMNWIDTHS)
		   (STRINGWIDTH SPACE FONT))
	   (for COLUMN in COLUMNWIDTHS sum COLUMN])

(LISTNCHARS
  [LAMBDA (LST DEPTH FONT FLG RDTBL)                         (* jop: "19-Jul-85 16:30")
                                                             (* CDRVAL must be non-negative to get here)
    (if (EQP (CAR (PRINTLEVEL))
	     DEPTH)
	then 1
      else (PROG ((TCDRLEVEL (DIFFERENCE (CDR (PRINTLEVEL))
					 DEPTH))
		  TOTALCHARS)
	         [SETQ TOTALCHARS (PLUS 1 (for ITEM in LST as I from 0 while (GREATERP TCDRLEVEL I)
					     sum (PLUS (if (LISTP ITEM)
							   then (LISTNCHARS ITEM (ADD1 DEPTH)
									    FLG RDTBL)
							 else (NCHARS ITEM FLG RDTBL))
						       1]
	         (SETQ TOTALCHARS (PLUS TOTALCHARS (if (GREATERP (LENGTH LST)
								 TCDRLEVEL)
						       then 2
						     else -1)
					1))
	         (RETURN TOTALCHARS])

(LISTSTRREGION
  [LAMBDA (LST DEPTH STREAM FLG RDTBL)                       (* jop: "19-Jul-85 16:54")
                                                             (* CDRVAL must be non-negative to get here)
    (CREATEREGION (DSPXPOSITION NIL STREAM)
		  (DIFFERENCE (DSPYPOSITION NIL STREAM)
			      (FONTPROP STREAM (QUOTE DESCENT)))
		  (PLSTRINGWIDTH LST STREAM FLG RDTBL)
		  (FONTPROP STREAM (QUOTE HEIGHT])

(LISTSTRWIDTH
  [LAMBDA (LST DEPTH FONT FLG RDTBL)                         (* jop: "21-Jul-85 13:19")
                                                             (* CDRVAL must be non-negative to get here)
    (if (EQP (CAR (PRINTLEVEL))
	     DEPTH)
	then (STRINGWIDTH (QUOTE &)
			  FONT FLG RDTBL)
      else (PROG ((TCDRLEVEL (DIFFERENCE (CDR (PRINTLEVEL))
					 DEPTH))
		  (WIDTHOFSPACE (STRINGWIDTH (QUOTE % )
					     FONT FLG RDTBL))
		  TOTALWIDTH)
	         [SETQ TOTALWIDTH (PLUS (STRINGWIDTH (QUOTE %()
						     FONT FLG RDTBL)
					(for ITEM in LST as I from 0 while (GREATERP TCDRLEVEL I)
					   sum (PLUS (if (LISTP ITEM)
							 then (LISTSTRWIDTH ITEM (ADD1 DEPTH)
									    FONT FLG RDTBL)
						       else (STRINGWIDTH ITEM FONT FLG RDTBL))
						     WIDTHOFSPACE]
	         (SETQ TOTALWIDTH (PLUS TOTALWIDTH (if (GREATERP (LENGTH LST)
								 TCDRLEVEL)
						       then (STRINGWIDTH (QUOTE --)
									 FONT FLG RDTBL)
						     else (IMINUS WIDTHOFSPACE))
					(STRINGWIDTH (QUOTE %))
						     FONT FLG RDTBL)))
	         (RETURN TOTALWIDTH])

(PLNCHARS
  [LAMBDA (STR FLG RDTBL)                                    (* jop: "25-Jul-85 16:46")

          (* * A VERSION OF NCHARS WHICH PAYS ATTENTION TO PRINT LEVEL)


    (if (OR (NOT (LISTP STR))
	    (LESSP (CDR (PRINTLEVEL))
		   0)
	    (LESSP (CAR (PRINTLEVEL))
		   0))
	then (NCHARS STR FLG RDTBL)
      else (LISTNCHARS STR 0 FLG RDTBL])

(PLSTRINGREGION
  [LAMBDA (STR STREAM FLG RDTBL)                             (* jop: "21-Jul-85 13:42")

          (* * A VERSION OF STRINREGION WHICH PAYS ATTENTION TO PRINT LEVEL)


    (if (OR (NOT (LISTP STR))
	    (LESSP (CDR (PRINTLEVEL))
		   0)
	    (LESSP (CAR (PRINTLEVEL))
		   0))
	then (STRINGREGION STR STREAM FLG RDTBL)
      else (CREATEREGION (DSPXPOSITION NIL STREAM)
			 (DIFFERENCE (DSPYPOSITION NIL STREAM)
				     (FONTPROP STREAM (QUOTE DESCENT)))
			 (PLSTRINGWIDTH STR STREAM FLG RDTBL)
			 (FONTPROP STREAM (QUOTE HEIGHT])

(PLSTRINGWIDTH
  [LAMBDA (STR FONT FLG RDTBL)                               (* jop: "19-Jul-85 16:16")

          (* * A VERSION OF STRINGWIDTH WHICH PAYS ATTENTION TO PRINT LEVEL)


    (if (OR (NOT (LISTP STR))
	    (LESSP (CDR (PRINTLEVEL))
		   0)
	    (LESSP (CAR (PRINTLEVEL))
		   0))
	then (STRINGWIDTH STR FONT FLG RDTBL)
      else (LISTSTRWIDTH STR 0 FONT FLG RDTBL])
)

(RPAQ? INSPECTORFONT NIL)
(DECLARE: DOEVAL@COMPILE DONTCOPY

(GLOBALVARS INSPECTORFONT)
)
(/DECLAREDATATYPE (QUOTE ICMLARRAY.ACTIVEREGION)
		  (QUOTE (POINTER POINTER POINTER))
		  (QUOTE ((ICMLARRAY.ACTIVEREGION 0 POINTER)
			  (ICMLARRAY.ACTIVEREGION 2 POINTER)
			  (ICMLARRAY.ACTIVEREGION 4 POINTER)))
		  (QUOTE 6))
(/DECLAREDATATYPE (QUOTE ONEDINSPECT.SELECTION)
		  (QUOTE (POINTER POINTER POINTER POINTER))
		  (QUOTE ((ONEDINSPECT.SELECTION 0 POINTER)
			  (ONEDINSPECT.SELECTION 2 POINTER)
			  (ONEDINSPECT.SELECTION 4 POINTER)
			  (ONEDINSPECT.SELECTION 6 POINTER)))
		  (QUOTE 8))
(/DECLAREDATATYPE (QUOTE TWODINSPECT.SELECTION)
		  (QUOTE (POINTER POINTER POINTER POINTER POINTER))
		  (QUOTE ((TWODINSPECT.SELECTION 0 POINTER)
			  (TWODINSPECT.SELECTION 2 POINTER)
			  (TWODINSPECT.SELECTION 4 POINTER)
			  (TWODINSPECT.SELECTION 6 POINTER)
			  (TWODINSPECT.SELECTION 8 POINTER)))
		  (QUOTE 10))
(DECLARE: DOEVAL@COMPILE DONTCOPY 
[DECLARE: EVAL@COMPILE 

(DATATYPE ICMLARRAY.ACTIVEREGION (REGION FUNCTION DATA))

(DATATYPE ONEDINSPECT.SELECTION (PROP ELTBOTTOM ELTLEFT ELTWIDTH))

(DATATYPE TWODINSPECT.SELECTION (ROWPROP COLUMNPROP ELTBOTTOM ELTLEFT ELTWIDTH))
]
(/DECLAREDATATYPE (QUOTE ICMLARRAY.ACTIVEREGION)
		  (QUOTE (POINTER POINTER POINTER))
		  (QUOTE ((ICMLARRAY.ACTIVEREGION 0 POINTER)
			  (ICMLARRAY.ACTIVEREGION 2 POINTER)
			  (ICMLARRAY.ACTIVEREGION 4 POINTER)))
		  (QUOTE 6))
(/DECLAREDATATYPE (QUOTE ONEDINSPECT.SELECTION)
		  (QUOTE (POINTER POINTER POINTER POINTER))
		  (QUOTE ((ONEDINSPECT.SELECTION 0 POINTER)
			  (ONEDINSPECT.SELECTION 2 POINTER)
			  (ONEDINSPECT.SELECTION 4 POINTER)
			  (ONEDINSPECT.SELECTION 6 POINTER)))
		  (QUOTE 8))
(/DECLAREDATATYPE (QUOTE TWODINSPECT.SELECTION)
		  (QUOTE (POINTER POINTER POINTER POINTER POINTER))
		  (QUOTE ((TWODINSPECT.SELECTION 0 POINTER)
			  (TWODINSPECT.SELECTION 2 POINTER)
			  (TWODINSPECT.SELECTION 4 POINTER)
			  (TWODINSPECT.SELECTION 6 POINTER)
			  (TWODINSPECT.SELECTION 8 POINTER)))
		  (QUOTE 10))
)
(DECLARE: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY 
(DECLARE: DOEVAL@COMPILE DONTCOPY

(LOCALVARS . T)
)
)
(PUTPROPS TWODINSPECTOR COPYRIGHT ("Xerox Corporation" 1985 1900))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (2644 101210 (ONEDINSPECT.PROPWIDTH 2654 . 3078) (ONEDINSPECT.REDISPLAY 3080 . 5579) (
ONEDINSPECT.VALUEWIDTH 5581 . 6102) (ONEDINSPECT.ADJUSTPROPSELECTION 6104 . 7355) (
ONEDINSPECT.ADJUSTSELECTION 7357 . 8405) (ONEDINSPECT.ARRANGEWINDOWS 8407 . 12678) (
ONEDINSPECT.BUTTONEVENTFN 12680 . 16492) (ONEDINSPECT.CLOSEFN 16494 . 16806) (
ONEDINSPECT.DEFAULT.TITLECOMMANDFN 16808 . 17684) (ONEDINSPECT.DEFAULT.VALUECOMMANDFN 17686 . 18956) (
ONEDINSPECT.INVERTSELECTION 18958 . 19555) (ONEDINSPECT.MAKEREGIONS 19557 . 21203) (
ONEDINSPECT.PRINTELEMENT 21205 . 21442) (ONEDINSPECT.REPAINTFN 21444 . 22950) (ONEDINSPECT.REPLACE 
22952 . 23291) (ONEDINSPECT.RESHAPEFN 23293 . 23635) (ONEDINSPECT.RIGHTW.BUTTONEVENTFN 23637 . 28007) 
(ONEDINSPECT.RIGHTW.REPAINTFN 28009 . 29451) (ONEDINSPECT.RIGHTW.RESHAPEFN 29453 . 29698) (
ONEDINSPECT.SCROLLFN 29700 . 30123) (ONEDINSPECT.SELECTITEM 30125 . 31692) (ONEDINSPECT.SELECTPROP 
31694 . 33281) (ONEDINSPECT.SETELT 33283 . 34002) (ONEDINSPECTW.CREATE 34004 . 39298) (
TWODINSPECT.COLUMNWIDTH 39300 . 39941) (TWODINSPECT.COLUMNWIDTHS 39943 . 40281) (TWODINSPECT.CLOSEFN 
40283 . 40771) (TWODINSPECT.ARRANGEWINDOWS 40773 . 46338) (TWODINSPECTW.CREATE 46340 . 53551) (
TITLEW.BUTTONEVENTFN 53553 . 53954) (TWODINSPECT.DEFAULT.TITLECOMMANDFN 53956 . 54832) (
TITLEW.REPAINTFN 54834 . 55186) (TWODINSPECT.INVERTREGION 55188 . 55431) (TWODINSPECT.BUTTONEVENTFN 
55433 . 60544) (TWODINSPECT.DEFAULT.VALUECOMMANDFN 60546 . 61830) (TWODINSPECT.DOWINDOWCOMFN 61832 . 
62407) (TWODINSPECT.MAKEREGIONS 62409 . 64736) (TWODINSPECT.PRINTELEMENT 64738 . 65040) (
TWODINSPECT.REDISPLAY 65042 . 68780) (TWODINSPECT.INVERTSELECTION 68782 . 69379) (
TWODINSPECT.ADJUSTCOLUMNSELECTION 69381 . 70658) (TWODINSPECT.ADJUSTROWSELECTION 70660 . 71952) (
TWODINSPECT.ADJUSTSELECTION 71954 . 73725) (TWODINSPECT.REPAINTFN 73727 . 76242) (
TWODINSPECT.RESHAPEFN 76244 . 76586) (TWODINSPECT.ROWPROPWIDTH 76588 . 77024) (TWODINSPECT.SCROLLFN 
77026 . 77686) (TWODINSPECT.SELECTCOLUMNPROP 77688 . 79318) (TWODINSPECT.SELECTITEM 79320 . 81472) (
TWODINSPECT.SELECTROWPROP 81474 . 83121) (TWODINSPECT.SETELT 83123 . 83630) (TWODINSPECT.REPLACE 83632
 . 83999) (TWODINSPECT.RIGHTW.BUTTONEVENTFN 84001 . 88644) (TWODINSPECT.RIGHTW.REPAINTFN 88646 . 90154
) (TWODINSPECT.RIGHTW.RESHAPEFN 90156 . 90434) (TWODINSPECT.TOPW.BUTTONEVENTFN 90436 . 94937) (
TWODINSPECT.TOPW.REPAINTFN 94939 . 96474) (TWODINSPECT.TOPW.RESHAPEFN 96476 . 96753) (
TWODINSPECT.TOTALWIDTH 96755 . 97019) (LISTNCHARS 97021 . 97944) (LISTSTRREGION 97946 . 98409) (
LISTSTRWIDTH 98411 . 99688) (PLNCHARS 99690 . 100109) (PLSTRINGREGION 100111 . 100760) (PLSTRINGWIDTH 
100762 . 101208)))))
STOP