(FILECREATED " 2-May-86 14:06:59" {SUMEX-AIM}PS:<LANE>DSPSCALE.LSP;35 23457  

      changes to:  (FNS DSPUNSCALE.REGION STRINGREGION!)

      previous date: "24-Apr-86 08:36:44" {SUMEX-AIM}PS:<LANE>DSPSCALE.LSP;34)


(PRETTYCOMPRINT DSPSCALECOMS)

(RPAQQ DSPSCALECOMS ((LOCALVARS . T)
	(FNS CENTERPRINTINREGION! CHARWIDTH! CHARWIDTHY! CURSORPOSITION! DSPROTATE DSPTRANSLATE 
	     DSPUNITS BITBLT! BITMAPBIT! BLTSHADE! DSPBACKUP! DSPBOTTOMMARGIN! DSPCLIPPINGREGION! 
	     DRAWBETWEEN! DRAWCIRCLE! DRAWCURVE! DRAWELLIPSE! DRAWLINE! DRAWPOLYGON! DRAWTO! 
	     FILLCIRCLE! FILLPOLYGON! FONTPROP! DSPLEFTMARGIN! DSPLINEFEED! GETPOSITION! MOVETO! 
	     MOVETOUPPERLEFT! DSPRIGHTMARGIN! DSPSCALE! RELDRAWTO! RELMOVETO! SCALEDBITBLT! 
	     STRINGREGION! STRINGWIDTH! DSPSPACEFACTOR! DSPTOPMARGIN! DSPXOFFSET! DSPXPOSITION! 
	     DSPYOFFSET! DSPYPOSITION!)
	(FNS DSPSCALE.BRUSH DSPSCALE.DASHING DSPSCALE.POINTS DSPSCALE.REGION DSPSCALE.NUMBER 
	     DSPSCALE.POSITION DSPSCALE.XPOSITION DSPSCALE.YPOSITION DSPSCALE.WIDTH DSPUNSCALE.REGION 
	     DSPUNSCALE.POSITION DSPUNSCALE.NUMBER DSPUNSCALE.CHARACTER)
	[INITVARS (SCRATCHBRUSH '(ROUND 1 NIL))
		  (SCRATCHREGION (create REGION))
		  (SCRATCHPOSITION (create POSITION))
		  (SCRATCHPOINTS (to 30 collect (create POSITION]
	(GLOBALVARS SCRATCHBRUSH SCRATCHREGION SCRATCHPOSITION SCRATCHPOINTS)
	(RECORDS CONVERT)
	(MACROS DSPUNSCALE.XPOSITION DSPUNSCALE.YPOSITION)
	(* * Temporary Backward Compatibility Functions)
	(FNS \SCALE.BRUSH \SCALE.DASHING \SCALE.POINTS \SCALE.REGION \SCALE.NUMBER \SCALE.POSITION 
	     \SCALE.XPOSITION \SCALE.YPOSITION \SCALE.WIDTH \UNSCALE.REGION \UNSCALE.POSITION 
	     \UNSCALE.NUMBER \UNSCALE.CHARACTER)
	(MACROS \UNSCALE.XPOSITION \UNSCALE.YPOSITION)))
(DECLARE: DOEVAL@COMPILE DONTCOPY

(LOCALVARS . T)
)
(DEFINEQ

(CENTERPRINTINREGION!
  [LAMBDA (EXP REGION STREAM)                                (* cdl "29-Jul-85 12:09")
    (CENTERPRINTINREGION EXP (if REGION
				   then (DSPSCALE.REGION REGION STREAM))
			   STREAM])

(CHARWIDTH!
  [LAMBDA (CHARCODE FONT STREAM)                           (* cdl "29-Jul-85 09:11")
    (DSPUNSCALE.CHARACTER (CHARWIDTH CHARCODE FONT)
			    FONT STREAM])

(CHARWIDTHY!
  [LAMBDA (CHARCODE FONT STREAM)                           (* cdl "29-Jul-85 09:12")
    (DSPUNSCALE.CHARACTER (CHARWIDTHY CHARCODE FONT)
			    FONT STREAM])

(CURSORPOSITION!
  [LAMBDA (NEWPOSITION STREAM OLDPOSITION)                   (* cdl "30-Oct-85 08:15")
    (DSPUNSCALE.POSITION (CURSORPOSITION (if NEWPOSITION
						 then (DSPSCALE.POSITION NEWPOSITION STREAM 
									     OLDPOSITION))
					     STREAM OLDPOSITION)
			   STREAM OLDPOSITION])

(DSPROTATE
  [LAMBDA (ANGLE STREAM)                                     (* cdl "29-Oct-85 16:41")
    (if (NUMBERP ANGLE)
	then (STREAMPROP (if (type? STREAM STREAM)
				 then STREAM
			       else (GETSTREAM STREAM))
			     'ROTATE
			     ANGLE)
      else (ERROR ANGLE "Not an angle"])

(DSPTRANSLATE
  [LAMBDA (POSITION STREAM)                                (* cdl "29-Oct-85 16:09")
    (if (POSITIONP POSITION)
	then (STREAMPROP (if (type? STREAM STREAM)
				 then STREAM
			       else (GETSTREAM STREAM))
			     'TRANSLATE
			     POSITION)
      else (ERROR POSITION "Not a position"])

(DSPUNITS
  [LAMBDA (UNITS STREAM)                                     (* cdl "23-Apr-86 09:40")
    (if (NOT (type? STREAM STREAM))
	then (SETQ STREAM (GETSTREAM STREAM)))
    (PROG1 (STREAMPROP STREAM 'UNITS)
	     (if UNITS
		 then (STREAMPROP STREAM 'UNITS
				      UNITS)
			(STREAMPROP STREAM 'SCALED
				      T)
			(LET [(RATIO (STREAMPROP STREAM 'RATIO]
			     [if (NULL RATIO)
				 then (STREAMPROP STREAM 'RATIO
						      (SETQ RATIO (create CONVERT
									      DESTINATION ← 1]
			     (with CONVERT RATIO (SETQ SOURCE UNITS])

(BITBLT!
  [LAMBDA (SOURCE SOURCELEFT SOURCEBOTTOM DESTINATION DESTINATIONLEFT DESTINATIONBOTTOM WIDTH HEIGHT 
		  SOURCETYPE OPERATION TEXTURE CLIPPINGREGION)
                                                             (* cdl "29-Jul-85 12:09")
    (BITBLT SOURCE SOURCELEFT SOURCEBOTTOM DESTINATION (DSPSCALE.XPOSITION DESTINATIONLEFT 
									       DESTINATION)
	      (DSPSCALE.YPOSITION DESTINATIONBOTTOM DESTINATION)
	      WIDTH HEIGHT SOURCETYPE OPERATION TEXTURE (DSPSCALE.REGION CLIPPINGREGION DESTINATION]
)

(BITMAPBIT!
  [LAMBDA (STREAM X Y NEWVALUE)                              (* cdl "29-Jul-85 12:01")
    (BITMAPBIT STREAM (DSPSCALE.XPOSITION X STREAM)
		 (DSPSCALE.YPOSITION Y STREAM)
		 NEWVALUE])

(BLTSHADE!
  [LAMBDA (TEXTURE DESTINATION DESTINATIONLEFT DESTINATIONBOTTOM WIDTH HEIGHT OPERATION 
		   CLIPPINGREGION)                           (* cdl "29-Jul-85 12:02")
    (BLTSHADE TEXTURE DESTINATION (DSPSCALE.XPOSITION DESTINATIONLEFT DESTINATION)
		(DSPSCALE.YPOSITION DESTINATIONBOTTOM DESTINATION)
		(DSPSCALE.NUMBER WIDTH DESTINATION)
		(DSPSCALE.NUMBER HEIGHT DESTINATION)
		OPERATION
		(DSPSCALE.REGION CLIPPINGREGION DESTINATION])

(DSPBACKUP!
  [LAMBDA (WIDTH DISPLAYSTREAM)                              (* cdl "29-Jul-85 12:02")
    (DSPBACKUP (if WIDTH
		     then (DSPSCALE.XPOSITION WIDTH DISPLAYSTREAM))
		 DISPLAYSTREAM])

(DSPBOTTOMMARGIN!
  [LAMBDA (YPOSITION STREAM)                                 (* cdl "29-Jul-85 12:02")
    (DSPUNSCALE.YPOSITION (DSPBOTTOMMARGIN (if YPOSITION
						 then (DSPSCALE.YPOSITION YPOSITION STREAM))
					     STREAM)
			  STREAM])

(DSPCLIPPINGREGION!
  [LAMBDA (REGION STREAM)                                    (* cdl "29-Jul-85 08:41")
    (DSPUNSCALE.REGION (DSPCLIPPINGREGION (if REGION
						  then (DSPSCALE.REGION REGION STREAM))
					      STREAM)
			 STREAM])

(DRAWBETWEEN!
  [LAMBDA (PT1 PT2 WIDTH OPERATION STREAM COLOR DASHING)     (* cdl "29-Oct-85 15:30")
    (DRAWBETWEEN (DSPSCALE.POSITION PT1 STREAM (CAR SCRATCHPOINTS))
		   (DSPSCALE.POSITION PT2 STREAM (CADR SCRATCHPOINTS))
		   (DSPSCALE.WIDTH WIDTH STREAM)
		   OPERATION STREAM COLOR (DSPSCALE.DASHING DASHING STREAM])

(DRAWCIRCLE!
  [LAMBDA (CENTERX CENTERY RADIUS BRUSH DASHING STREAM)      (* cdl "29-Jul-85 12:03")
    (DRAWCIRCLE (DSPSCALE.XPOSITION CENTERX STREAM)
		  (DSPSCALE.YPOSITION CENTERY STREAM)
		  (DSPSCALE.NUMBER RADIUS STREAM)
		  (DSPSCALE.BRUSH BRUSH STREAM)
		  (DSPSCALE.DASHING DASHING STREAM)
		  STREAM])

(DRAWCURVE!
  [LAMBDA (KNOTS CLOSED BRUSH DASHING STREAM)                (* cdl "29-Jul-85 10:04")
    (DRAWCURVE (DSPSCALE.POINTS KNOTS STREAM)
		 CLOSED
		 (DSPSCALE.BRUSH BRUSH STREAM)
		 (DSPSCALE.DASHING DASHING STREAM)
		 STREAM])

(DRAWELLIPSE!
  [LAMBDA (CENTERX CENTERY SEMIMINORRADIUS SEMIMAJORRADIUS ORIENTATION BRUSH DASHING STREAM)
                                                             (* cdl "29-Jul-85 12:03")
    (DRAWELLIPSE (DSPSCALE.XPOSITION CENTERX STREAM)
		   (DSPSCALE.YPOSITION CENTERY STREAM)
		   (DSPSCALE.NUMBER SEMIMINORRADIUS STREAM)
		   (DSPSCALE.NUMBER SEMIMAJORRADIUS STREAM)
		   ORIENTATION
		   (DSPSCALE.BRUSH BRUSH STREAM)
		   (DSPSCALE.DASHING DASHING STREAM)
		   STREAM])

(DRAWLINE!
  [LAMBDA (X1 Y1 X2 Y2 WIDTH OPERATION STREAM COLOR DASHING)
                                                             (* cdl "29-Oct-85 15:28")
    (DRAWLINE (DSPSCALE.XPOSITION X1 STREAM)
		(DSPSCALE.YPOSITION Y1 STREAM)
		(DSPSCALE.XPOSITION X2 STREAM)
		(DSPSCALE.YPOSITION Y2 STREAM)
		(DSPSCALE.WIDTH WIDTH STREAM)
		OPERATION STREAM COLOR (DSPSCALE.DASHING DASHING STREAM])

(DRAWPOLYGON!
  [LAMBDA (POINTS CLOSED BRUSH DASHING STREAM)               (* cdl "29-Jul-85 10:05")
    (DRAWPOLYGON (DSPSCALE.POINTS POINTS STREAM)
		   CLOSED
		   (DSPSCALE.BRUSH BRUSH STREAM)
		   (DSPSCALE.DASHING DASHING STREAM)
		   STREAM])

(DRAWTO!
  [LAMBDA (X Y WIDTH OPERATION STREAM COLOR DASHING)         (* cdl "29-Oct-85 15:31")
    (DRAWTO (DSPSCALE.XPOSITION X STREAM)
	      (DSPSCALE.YPOSITION Y STREAM)
	      (DSPSCALE.WIDTH WIDTH STREAM)
	      OPERATION STREAM COLOR (DSPSCALE.DASHING DASHING STREAM])

(FILLCIRCLE!
  [LAMBDA (CENTERX CENTERY RADIUS TEXTURE STREAM)            (* cdl " 7-Feb-86 15:02")
    (FILLCIRCLE (DSPSCALE.XPOSITION CENTERX STREAM)
		  (DSPSCALE.YPOSITION CENTERY STREAM)
		  (DSPSCALE.NUMBER RADIUS STREAM)
		  TEXTURE STREAM])

(FILLPOLYGON!
  [LAMBDA (KNOTS TEXTURE STREAM)                             (* cdl "30-Oct-85 07:44")
    (FILLPOLYGON (DSPSCALE.POINTS KNOTS STREAM)
		   TEXTURE STREAM])

(FONTPROP!
  [LAMBDA (FONT PROP STREAM)                                 (* cdl "23-Apr-86 08:48")
    (SELECTQ PROP
	       ((ASCENT DESCENT HEIGHT)
		 (DSPUNSCALE.CHARACTER (FONTPROP FONT PROP)
					 FONT STREAM))
	       (FONTPROP FONT PROP])

(DSPLEFTMARGIN!
  [LAMBDA (XPOSITION STREAM)                                 (* cdl "29-Jul-85 12:05")
    (DSPUNSCALE.XPOSITION (DSPLEFTMARGIN (if XPOSITION
					       then (DSPSCALE.XPOSITION XPOSITION STREAM))
					   STREAM)
			  STREAM])

(DSPLINEFEED!
  [LAMBDA (DELTAY STREAM)                                    (* cdl "29-Jul-85 11:11")
    (DSPUNSCALE.NUMBER (DSPLINEFEED (if DELTAY
					    then (DSPSCALE.NUMBER DELTAY STREAM))
					STREAM)
			 STREAM])

(GETPOSITION!
  [LAMBDA (STREAM CURSOR)                                    (* cdl "30-Oct-85 08:03")
    (DSPUNSCALE.POSITION (GETPOSITION STREAM CURSOR)
			   STREAM])

(MOVETO!
  [LAMBDA (X Y STREAM)                                       (* cdl "29-Jul-85 12:06")
    (MOVETO (DSPSCALE.XPOSITION X STREAM)
	      (DSPSCALE.YPOSITION Y STREAM)
	      STREAM])

(MOVETOUPPERLEFT!
  [LAMBDA (WINDOW REGION)                                    (* cdl "29-Jul-85 12:10")
    (MOVETOUPPERLEFT WINDOW (if REGION
				  then (DSPSCALE.REGION REGION WINDOW])

(DSPRIGHTMARGIN!
  [LAMBDA (XPOSITION STREAM)                                 (* cdl "16-Oct-85 16:11")
    (DSPUNSCALE.XPOSITION (DSPRIGHTMARGIN (if XPOSITION
						then (DSPSCALE.XPOSITION XPOSITION STREAM))
					    STREAM)
			  STREAM])

(DSPSCALE!
  [LAMBDA (SCALE STREAM)                                     (* cdl "23-Apr-86 09:40")
    (if (NOT (type? STREAM STREAM))
	then (SETQ STREAM (GETSTREAM STREAM)))
    (PROG1 (OR (STREAMPROP STREAM 'SCALE)
		   (DSPSCALE NIL STREAM))
	     (if SCALE
		 then (STREAMPROP STREAM 'SCALE
				      SCALE)
			(STREAMPROP STREAM 'SCALED
				      T)
			(LET [(RATIO (STREAMPROP STREAM 'RATIO]
			     [if (NULL RATIO)
				 then (STREAMPROP STREAM 'RATIO
						      (SETQ RATIO (create CONVERT
									      SOURCE ← 1]
			     (with CONVERT RATIO (SETQ DESTINATION (TIMES SCALE
										(DSPSCALE NIL 
											   STREAM])

(RELDRAWTO!
  [LAMBDA (DX DY WIDTH OPERATION STREAM COLOR DASHING)       (* cdl "29-Oct-85 15:31")
    (RELDRAWTO (DSPSCALE.NUMBER DX STREAM)
		 (DSPSCALE.NUMBER DY STREAM)
		 (DSPSCALE.WIDTH WIDTH STREAM)
		 OPERATION STREAM COLOR (DSPSCALE.DASHING DASHING STREAM])

(RELMOVETO!
  [LAMBDA (DX DY STREAM)                                     (* cdl "30-Oct-85 07:43")
    (RELMOVETO (DSPSCALE.NUMBER DX STREAM)
		 (DSPSCALE.NUMBER DY STREAM)
		 STREAM])

(SCALEDBITBLT!
  [LAMBDA (SOURCE SOURCELEFT SOURCEBOTTOM DESTINATION DESTINATIONLEFT DESTINATIONBOTTOM WIDTH HEIGHT 
		  SOURCETYPE OPERATION TEXTURE CLIPPINGREGION SCALE)
                                                             (* cdl "29-Jul-85 12:13")
    (SCALEDBITBLT SOURCELEFT SOURCEBOTTOM DESTINATION (DSPSCALE.XPOSITION DESTINATIONLEFT 
									      DESTINATION)
		    (DSPSCALE.YPOSITION DESTINATIONBOTTOM DESTINATION)
		    WIDTH HEIGHT SOURCETYPE OPERATION TEXTURE (DSPSCALE.REGION CLIPPINGREGION 
										 DESTINATION)
		    SCALE])

(STRINGREGION!
  [LAMBDA (STR STREAM PRIN2FLG RDTBL)                        (* cdl " 2-May-86 14:05")
    (LET ((REGION (STRINGREGION STR STREAM PRIN2FLG RDTBL)))
         (DSPUNSCALE.REGION REGION STREAM REGION])

(STRINGWIDTH!
  [LAMBDA (STR FONT FLG RDTBL STREAM)                        (* cdl "29-Jul-85 09:12")
    (DSPUNSCALE.CHARACTER (STRINGWIDTH STR FONT FLG RDTBL)
			    FONT STREAM])

(DSPSPACEFACTOR!
  [LAMBDA (FACTOR STREAM)                                    (* cdl "29-Jul-85 11:12")
    (DSPUNSCALE.NUMBER (DSPSPACEFACTOR (if FACTOR
					       then (DSPSCALE.NUMBER FACTOR STREAM))
					   STREAM)
			 STREAM])

(DSPTOPMARGIN!
  [LAMBDA (YPOSITION STREAM)                                 (* cdl "29-Jul-85 12:00")
    (DSPUNSCALE.YPOSITION (DSPTOPMARGIN (if YPOSITION
					      then (DSPSCALE.YPOSITION YPOSITION STREAM))
					  STREAM)
			  STREAM])

(DSPXOFFSET!
  [LAMBDA (XOFFSET DISPLAYSTREAM)                            (* cdl "29-Jul-85 11:12")
    (DSPUNSCALE.NUMBER (DSPXOFFSET (if XOFFSET
					   then (DSPSCALE.NUMBER XOFFSET DISPLAYSTREAM))
				       DISPLAYSTREAM)
			 DISPLAYSTREAM])

(DSPXPOSITION!
  [LAMBDA (XPOSITION STREAM)                                 (* cdl "29-Jul-85 12:00")
    (DSPUNSCALE.XPOSITION (DSPXPOSITION (if XPOSITION
					      then (DSPSCALE.XPOSITION XPOSITION STREAM))
					  STREAM)
			  STREAM])

(DSPYOFFSET!
  [LAMBDA (YOFFSET DISPLAYSTREAM)                            (* cdl "29-Jul-85 11:59")
    (DSPUNSCALE.NUMBER (DSPYOFFSET (if YOFFSET
					   then (DSPSCALE.NUMBER YOFFSET DISPLAYSTREAM))
				       DISPLAYSTREAM)
			 DISPLAYSTREAM])

(DSPYPOSITION!
  [LAMBDA (YPOSITION STREAM)                                 (* cdl "29-Jul-85 11:59")
    (DSPUNSCALE.YPOSITION (DSPYPOSITION (if YPOSITION
					      then (DSPSCALE.YPOSITION YPOSITION STREAM))
					  STREAM)
			  STREAM])
)
(DEFINEQ

(DSPSCALE.BRUSH
  [LAMBDA (BRUSH STREAM)                                     (* cdl "29-Oct-85 15:29")
    (if (NULL BRUSH)
	then (create BRUSH
			 BRUSHSHAPE ← 'ROUND
			 BRUSHSIZE ←(DSPSCALE.WIDTH 1 STREAM) smashing SCRATCHBRUSH)
      elseif (LISTP BRUSH)
	then (with BRUSH BRUSH (create BRUSH
					     BRUSHCOLOR ← BRUSHCOLOR
					     BRUSHSHAPE ← BRUSHSHAPE
					     BRUSHSIZE ←(DSPSCALE.WIDTH BRUSHSIZE STREAM)
				      smashing SCRATCHBRUSH))
      elseif (NUMBERP BRUSH)
	then (DSPSCALE.WIDTH BRUSH STREAM)
      else BRUSH])

(DSPSCALE.DASHING
  [LAMBDA (DASHING STREAM)                                   (* cdl "29-Oct-85 15:41")
    (if (LISTP DASHING)
	then (for WIDTH in DASHING collect (DSPSCALE.WIDTH WIDTH STREAM))
      elseif (NUMBERP DASHING)
	then (DSPSCALE.WIDTH DASHING STREAM)
      else DASHING])

(DSPSCALE.POINTS
  [LAMBDA (KNOTS STREAM)                                     (* cdl "29-Oct-85 15:59")
    (bind (KNOTSLST ← SCRATCHPOINTS) for KNOT in KNOTS
       collect (DSPSCALE.POSITION KNOT STREAM (if KNOTSLST
						      then (pop KNOTSLST)
						    else (push SCRATCHPOINTS (create POSITION))
							   (CAR SCRATCHPOINTS])

(DSPSCALE.REGION
  [LAMBDA (REGION STREAM SMASH)                              (* cdl "28-Oct-85 09:00")
    (if (type? REGION REGION)
	then (with REGION REGION (create REGION
					       LEFT ←(DSPSCALE.XPOSITION LEFT STREAM)
					       BOTTOM ←(DSPSCALE.YPOSITION BOTTOM STREAM)
					       WIDTH ←(DSPSCALE.NUMBER WIDTH STREAM)
					       HEIGHT ←(DSPSCALE.NUMBER HEIGHT STREAM)
					smashing (OR SMASH SCRATCHREGION)))
      else REGION])

(DSPSCALE.NUMBER
  [LAMBDA (VALUE STREAM)                                     (* cdl "23-Apr-86 09:10")
    (if (NUMBERP VALUE)
	then (if (NOT (type? STREAM STREAM))
		   then (SETQ STREAM (GETSTREAM STREAM)))
	       (if [FLOATP (SETQ VALUE (if (GETSTREAMPROP STREAM 'SCALED)
						 then (with CONVERT (GETSTREAMPROP
								  STREAM
								  'RATIO)
								(QUOTIENT (TIMES VALUE 
										     DESTINATION)
									    SOURCE))
					       else (TIMES (IMAGEOP 'IMSCALE
									STREAM STREAM)
							       VALUE]
		   then (FIXR VALUE)
		 else VALUE)
      else VALUE])

(DSPSCALE.POSITION
  [LAMBDA (POSITION STREAM SMASH)                          (* cdl "29-Jul-85 11:57")
    (with POSITION POSITION (create POSITION
					XCOORD ←(DSPSCALE.XPOSITION XCOORD STREAM)
					YCOORD ←(DSPSCALE.YPOSITION YCOORD STREAM)
				 smashing (OR SMASH SCRATCHPOSITION])

(DSPSCALE.XPOSITION
  [LAMBDA (VALUE STREAM)                                     (* cdl " 1-Nov-85 08:47")
    (if (NUMBERP VALUE)
	then (if (NOT (type? STREAM STREAM))
		   then (SETQ STREAM (GETSTREAM STREAM)))
	       [LET [(TRANSLATE (GETSTREAMPROP STREAM 'TRANSLATE]
		    (if TRANSLATE
			then (with POSITION TRANSLATE (add VALUE XCOORD]
	       (DSPSCALE.NUMBER VALUE STREAM)
      else VALUE])

(DSPSCALE.YPOSITION
  [LAMBDA (VALUE STREAM)                                     (* cdl " 1-Nov-85 08:47")
    (if (NUMBERP VALUE)
	then (if (NOT (type? STREAM STREAM))
		   then (SETQ STREAM (GETSTREAM STREAM)))
	       [LET [(TRANSLATE (GETSTREAMPROP STREAM 'TRANSLATE]
		    (if TRANSLATE
			then (with POSITION TRANSLATE (add VALUE YCOORD]
	       (DSPSCALE.NUMBER VALUE STREAM)
      else VALUE])

(DSPSCALE.WIDTH
  [LAMBDA (WIDTH STREAM)                                     (* cdl "29-Oct-85 15:27")
    (if (ZEROP (SETQ WIDTH (DSPSCALE.NUMBER WIDTH STREAM)))
	then 1
      else WIDTH])

(DSPUNSCALE.REGION
  [LAMBDA (REGION STREAM SMASH)                              (* cdl " 2-May-86 14:04")
    (if (type? REGION REGION)
	then (with REGION REGION (create REGION
					       LEFT ←(DSPUNSCALE.XPOSITION LEFT STREAM)
					       BOTTOM ←(DSPUNSCALE.YPOSITION BOTTOM STREAM)
					       WIDTH ←(DSPUNSCALE.NUMBER WIDTH STREAM)
					       HEIGHT ←(DSPUNSCALE.NUMBER HEIGHT STREAM)
					smashing (OR SMASH SCRATCHREGION)))
      else REGION])

(DSPUNSCALE.POSITION
  [LAMBDA (POSITION STREAM SMASH)                          (* cdl "17-Sep-85 14:21")
    (with POSITION POSITION (create POSITION
					XCOORD ←(DSPUNSCALE.XPOSITION XCOORD STREAM)
					YCOORD ←(DSPUNSCALE.YPOSITION YCOORD STREAM)
				 smashing (OR SMASH SCRATCHPOSITION])

(DSPUNSCALE.NUMBER
  [LAMBDA (VALUE STREAM OFFSET)                              (* cdl "23-Apr-86 09:18")
    (if (NUMBERP VALUE)
	then (if (NOT (type? STREAM STREAM))
		   then (SETQ STREAM (GETSTREAM STREAM)))
	       [SETQ VALUE (if (GETSTREAMPROP STREAM 'SCALED)
				 then (with CONVERT (GETSTREAMPROP STREAM 'RATIO)
						(QUOTIENT (TIMES VALUE SOURCE)
							    DESTINATION))
			       else (QUOTIENT VALUE (IMAGEOP 'IMSCALE
								 STREAM STREAM]
	       [if OFFSET
		   then (LET [(TRANSLATE (GETSTREAMPROP STREAM 'TRANSLATE]
			       (if TRANSLATE
				   then (with POSITION TRANSLATE
						  (SELECTQ OFFSET
							     (X (SETQ VALUE (DIFFERENCE VALUE 
											   XCOORD)))
							     (Y (SETQ VALUE (DIFFERENCE VALUE 
											   YCOORD)))
							     NIL]
	       (if (FLOATP VALUE)
		   then (FIXR VALUE)
		 else VALUE)
      else VALUE])

(DSPUNSCALE.CHARACTER
  [LAMBDA (WIDTH FONT STREAM)                                (* cdl "23-Apr-86 09:11")
    (LET (CONVERT VALUE)
         (if (NUMBERP WIDTH)
	     then (if [FLOATP (SETQ VALUE (if (AND STREAM (OR (type? STREAM STREAM)
									    (SETQ STREAM
									      (GETSTREAM STREAM)))
							       (GETSTREAMPROP STREAM 'SCALED))
						      then (with CONVERT (GETSTREAMPROP
								       STREAM
								       'RATIO)
								     (QUOTIENT (TIMES WIDTH 
											  SOURCE)
										 DESTINATION))
						    else (QUOTIENT WIDTH
								       (OR (with FONTDESCRIPTOR 
										     FONT FONTSCALE)
									     (IMAGEOP 'IMSCALE
										      STREAM STREAM]
			then (FIXR VALUE)
		      else VALUE)
	   else WIDTH])
)

(RPAQ? SCRATCHBRUSH '(ROUND 1 NIL))

(RPAQ? SCRATCHREGION (create REGION))

(RPAQ? SCRATCHPOSITION (create POSITION))

(RPAQ? SCRATCHPOINTS (to 30 collect (create POSITION)))
(DECLARE: DOEVAL@COMPILE DONTCOPY

(GLOBALVARS SCRATCHBRUSH SCRATCHREGION SCRATCHPOSITION SCRATCHPOINTS)
)
[DECLARE: EVAL@COMPILE 

(RECORD CONVERT (SOURCE . DESTINATION))
]
(DECLARE: EVAL@COMPILE 
[PUTPROPS DSPUNSCALE.XPOSITION MACRO ((VALUE STREAM)
	   (DSPUNSCALE.NUMBER VALUE STREAM 'X]
[PUTPROPS DSPUNSCALE.YPOSITION MACRO ((VALUE STREAM)
	   (DSPUNSCALE.NUMBER VALUE STREAM 'Y]
)
(* * Temporary Backward Compatibility Functions)

(DEFINEQ

(\SCALE.BRUSH
  [LAMBDA (BRUSH STREAM)
    (DSPSCALE.BRUSH BRUSH STREAM])

(\SCALE.DASHING
  [LAMBDA (DASHING STREAM)
    (DSPSCALE.DASHING DASHING STREAM])

(\SCALE.POINTS
  [LAMBDA (KNOTS STREAM)
    (DSPSCALE.POINTS KNOTS STREAM])

(\SCALE.REGION
  [LAMBDA (REGION STREAM SMASH)
    (DSPSCALE.REGION REGION STREAM SMASH])

(\SCALE.NUMBER
  [LAMBDA (VALUE STREAM)
    (DSPSCALE.NUMBER VALUE STREAM])

(\SCALE.POSITION
  [LAMBDA (POSITION STREAM SMASH)
    (DSPSCALE.POSITION POSITION STREAM SMASH])

(\SCALE.XPOSITION
  [LAMBDA (VALUE STREAM)
    (DSPSCALE.XPOSITION VALUE STREAM])

(\SCALE.YPOSITION
  [LAMBDA (VALUE STREAM)
    (DSPSCALE.YPOSITION VALUE STREAM])

(\SCALE.WIDTH
  [LAMBDA (WIDTH STREAM)
    (DSPSCALE.WIDTH WIDTH STREAM])

(\UNSCALE.REGION
  [LAMBDA (REGION STREAM)
    (DSPUNSCALE.REGION REGION STREAM])

(\UNSCALE.POSITION
  [LAMBDA (POSITION STREAM SMASH)                          (* cdl "23-Apr-86 09:00")
    (DSPUNSCALE.POSITION POSITION STREAM SMASH])

(\UNSCALE.NUMBER
  [LAMBDA (VALUE STREAM OFFSET)
    (DSPUNSCALE.NUMBER VALUE STREAM OFFSET])

(\UNSCALE.CHARACTER
  [LAMBDA (WIDTH FONT STREAM)
    (DSPUNSCALE.CHARACTER WIDTH FONT STREAM])
)
(DECLARE: EVAL@COMPILE 
(PUTPROPS \UNSCALE.XPOSITION MACRO (= . DSPUNSCALE.XPOSITION))
(PUTPROPS \UNSCALE.YPOSITION MACRO (= . DSPUNSCALE.YPOSITION))
)
(DECLARE: DONTCOPY
  (FILEMAP ((12987) (1801 NIL (CENTERPRINTINREGION! 1811 . 2043) (CHARWIDTH! 2045 . 2234) (CHARWIDTHY! 
2236 . 2427) (CURSORPOSITION! 2429 . 2753) (DSPROTATE 2755 . 3096) (DSPTRANSLATE 3098 . 3460) (
DSPUNITS 3462 . 4099) (BITBLT! 4101 . 4646) (BITMAPBIT! 4648 . 4865) (BLTSHADE! 4867 . 5344) (
DSPBACKUP! 5346 . 5566) (DSPBOTTOMMARGIN! 5568 . 5836) (DSPCLIPPINGREGION! 5838 . 6103) (DRAWBETWEEN! 
6105 . 6464) (DRAWCIRCLE! 6466 . 6810) (DRAWCURVE! 6812 . 7072) (DRAWELLIPSE! 7074 . 7594) (DRAWLINE! 
7596 . 8026) (DRAWPOLYGON! 8028 . 8301) (DRAWTO! 8303 . 8607) (FILLCIRCLE! 8609 . 8881) (FILLPOLYGON! 
8883 . 9069) (FONTPROP! 9071 . 9339) (DSPLEFTMARGIN! 9341 . 9608) (DSPLINEFEED! 9610 . 9858) (
GETPOSITION! 9860 . 10044) (MOVETO! 10046 . 10256) (MOVETOUPPERLEFT! 10258 . 10469) (DSPRIGHTMARGIN! 
10471 . 10735) (DSPSCALE! 10737 . 11476) (RELDRAWTO! 11478 . 11772) (RELMOVETO! 11774 . 11978) (
SCALEDBITBLT! 11980 . 12557) (STRINGREGION! 12559 . 12788) (STRINGWIDTH! 12790 . 12986)))))
STOP
EFACTOR! 13305 . 13570) (DSPTOPMARGIN! 13574 . 13842) (DSPXOFFSET! 13846 . 14125) (
DSPXPOSITION! 14129 . 14397) (DSPYOFFSET! 14401 . 14680) (DSPYPOSITION! 14684 . 14952)) (14957 21871 (
DSPSCALE.BRUSH 14969 . 15600) (DSPSCALE.DASHING 15604 . 15951) (DSPSCALE.POINTS 15955 . 16351) (
DSPSCALE.REGION 16355 . 16863) (DSPSCALE.NUMBER 16867 . 17570) (DSPSCALE.POSITION 17574 . 17901) (
DSPSCALE.XPOSITION 17905 . 18387) (DSPSCALE.YPOSITION 18391 . 18873) (DSPSCALE.WIDTH 18877 . 19102) (
DSPUNSCALE.REGION 19106 . 19616) (DSPUNSCALE.POSITION 19620 . 19945) (DSPUNSCALE.NUMBER 19949 . 20986)
 (DSPUNSCALE.CHARACTER 20990 . 21868)) (22534 23885 (\SCALE.BRUSH 22546 . 22629) (\SCALE.DASHING 22633
 . 22724) (\SCALE.POINTS 22728 . 22813) (\SCALE.REGION 22817 . 22916) (\SCALE.NUMBER 22920 . 23005) (
\SCALE.POSITION 23009 . 23120) (\SCALE.XPOSITION 23124 . 23215) (\SCALE.YPOSITION 23219 . 23310) (
\SCALE.WIDTH 23314 . 23397) (\UNSCALE.REGION 23401 . 23492) (\UNSCALE.POSITION 23496 . 23666) (
\UNSCALE.NUMBER 23670 . 23773) (\UNSCALE.CHARACTER 23777 . 23882)))))
STOP