(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP")
(FILECREATED "14-Sep-87 15:03:25" |{MCS:MCS:STANFORD}<LANE>DSPSCALE.;3| 49549  

      changes to%:  (FNS \TRANSLATE.DISPLAY DSPTRANSLATE! INITSCALEDIMAGESTREAM \DRAWARC.SCALED 
                         \DRAWPOINT.SCALED \ROTATE.SCALED DRAWARC! DRAWPOINT!)
                    (VARS DSPSCALECOMS)

      previous date%: "14-Sep-87 14:38:57" |{MCS:MCS:STANFORD}<LANE>DSPSCALE.;1|)


(* "
Copyright (c) 1985, 1986, 1987 by Stanford University.  All rights reserved.
")

(PRETTYCOMPRINT DSPSCALECOMS)

(RPAQQ DSPSCALECOMS 
       ((LOCALVARS . T)
        (* * SCALED ImageStream ImageOp Functions)
        (FNS INITSCALEDIMAGESTREAM OPENIMAGESTREAM.SCALED)
        (FNS \BACKCOLOR.SCALED \BITBLT.SCALED \BLTSHADE.SCALED \BOTTOMMARGIN.SCALED \BOUT.SCALED 
             \CHARSET.SCALED \CHARWIDTH.SCALED \CHARWIDTHY.SCALED \CLIPPINGREGION.SCALED 
             \CLOSEFN.SCALED \COLOR.SCALED \DRAWARC.SCALED \DRAWCIRCLE.SCALED \DRAWCURVE.SCALED 
             \DRAWELLIPSE.SCALED \DRAWLINE.SCALED \DRAWPOINT.SCALED \DRAWPOLYGON.SCALED 
             \FILLCIRCLE.SCALED \FILLPOLYGON.SCALED \FONT.SCALED \LEFTMARGIN.SCALED \LINEFEED.SCALED 
             \MOVETO.SCALED \NEWPAGE.SCALED \OPERATION.SCALED \RESET.SCALED \RIGHTMARGIN.SCALED 
             \ROTATE.SCALED \SCALE.SCALED \SCALEDBITBLT.SCALED \SPACEFACTOR.SCALED 
             \STRINGWIDTH.SCALED \TERPRI.SCALED \TOPMARGIN.SCALED \XPOSITION.SCALED \YPOSITION.SCALED 
             \OUTCHAR.SCALED)
        (* * Self Scaling DSP* Functions)
        (FNS CENTERPRINTINREGION! CHARWIDTH! CHARWIDTHY! CURSORPOSITION! BITBLT! BITMAPBIT! BLTSHADE! 
             DSPBACKUP! DSPBOTTOMMARGIN! DSPCLIPPINGREGION! DRAWBETWEEN! DRAWARC! DRAWCIRCLE! 
             DRAWCURVE! DRAWELLIPSE! DRAWLINE! DRAWPOINT! DRAWPOLYGON! DRAWTO! FILLCIRCLE! 
             FILLPOLYGON! FONTPROP! DSPLEFTMARGIN! DSPLINEFEED! GETPOSITION! MOVETO! MOVETOUPPERLEFT! 
             DSPRIGHTMARGIN! DSPSCALE! RELDRAWTO! RELMOVETO! SCALEDBITBLT! STRINGREGION! STRINGWIDTH! 
             DSPSPACEFACTOR! DSPTRANSLATE! DSPTOPMARGIN! DSPUNITS! DSPXOFFSET! DSPXPOSITION! 
             DSPYOFFSET! DSPYPOSITION!)
        (* * Low Level Scaling Functions)
        (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)
        (MACROS DSPUNSCALE.XPOSITION DSPUNSCALE.YPOSITION)
        (* * etc.)
        (FNS \TRANSLATE.DISPLAY)
        (DECLARE%: DONTCOPY (RECORDS SCALEDIMAGEDATA CONVERT))
        [ADDVARS (IMAGESTREAMTYPES (SCALED (OPENSTREAM OPENIMAGESTREAM.SCALED]
        (INITVARS \SCALEDIMAGEOPS \NULLFDEV)
        (GLOBALVARS \SCALEDIMAGEOPS \NULLFDEV)
        [INITVARS (SCRATCHBRUSH '(ROUND 1 NIL))
               (SCRATCHREGION (create REGION))
               (SCRATCHPOSITION (create POSITION))
               (SCRATCHPOINTS (to 30 collect (create POSITION]
        (GLOBALVARS SCRATCHBRUSH SCRATCHREGION SCRATCHPOSITION SCRATCHPOINTS)
        (P (MOVD? 'DSPUNITS! 'DSPUNITS)
           (INITSCALEDIMAGESTREAM))))
(DECLARE%: DOEVAL@COMPILE DONTCOPY

(LOCALVARS . T)
)
(* * SCALED ImageStream ImageOp Functions)

(DEFINEQ

(INITSCALEDIMAGESTREAM
  [LAMBDA NIL                                                (* ; "Edited 14-Sep-87 14:33 by cdl")

    (DECLARE (GLOBALVARS \DISPLAYIMAGEOPS))
    [if (NULL \NULLFDEV)
        then (SETQ \NULLFDEV (create FDEV
                                    CLOSEFILE ← (FUNCTION NILL]
    [with IMAGEOPS \DISPLAYIMAGEOPS (if (EQ (FUNCTION NILL)
                                            IMTRANSLATE)
                                        then                 (* Koto compatibility fix)
                                             (SETQ IMTRANSLATE (FUNCTION \TRANSLATE.DISPLAY]
    (SETQ \SCALEDIMAGEOPS (create IMAGEOPS
                                 IMAGETYPE ← 'SCALED
                                 IMCLOSEFN ← (FUNCTION \CLOSEFN.SCALED)
                                 IMXPOSITION ← (FUNCTION \XPOSITION.SCALED)
                                 IMYPOSITION ← (FUNCTION \YPOSITION.SCALED)
                                 IMFONT ← (FUNCTION \FONT.SCALED)
                                 IMLEFTMARGIN ← (FUNCTION \LEFTMARGIN.SCALED)
                                 IMRIGHTMARGIN ← (FUNCTION \RIGHTMARGIN.SCALED)
                                 IMLINEFEED ← (FUNCTION \LINEFEED.SCALED)
                                 IMDRAWLINE ← (FUNCTION \DRAWLINE.SCALED)
                                 IMDRAWCURVE ← (FUNCTION \DRAWCURVE.SCALED)
                                 IMDRAWCIRCLE ← (FUNCTION \DRAWCIRCLE.SCALED)
                                 IMFILLCIRCLE ← (FUNCTION \FILLCIRCLE.SCALED)
                                 IMFILLPOLYGON ← (FUNCTION \FILLPOLYGON.SCALED)
                                 IMBITBLT ← (FUNCTION \BITBLT.SCALED)
                                 IMBLTSHADE ← (FUNCTION \BLTSHADE.SCALED)
                                 IMMOVETO ← (FUNCTION \MOVETO.SCALED)
                                 IMSCALE ← (FUNCTION \SCALE.SCALED)
                                 IMTERPRI ← (FUNCTION \TERPRI.SCALED)
                                 IMFONTCREATE ← 'DISPLAY
                                 IMCOLOR ← (FUNCTION \COLOR.SCALED)
                                 IMBACKCOLOR ← (FUNCTION \BACKCOLOR.SCALED)
                                 IMSTRINGWIDTH ← (FUNCTION \STRINGWIDTH.SCALED)
                                 IMCHARWIDTH ← (FUNCTION \CHARWIDTH.SCALED)
                                 IMCHARWIDTHY ← (FUNCTION \CHARWIDTHY.SCALED)
                                 IMRESET ← (FUNCTION \RESET.SCALED)
                                 IMDRAWPOLYGON ← (FUNCTION \DRAWPOLYGON.SCALED)
                                 IMSCALEDBITBLT ← (FUNCTION \SCALEDBITBLT.SCALED)
                                 IMTOPMARGIN ← (FUNCTION \TOPMARGIN.SCALED)
                                 IMBOTTOMMARGIN ← (FUNCTION \BOTTOMMARGIN.SCALED)
                                 IMNEWPAGE ← (FUNCTION \NEWPAGE.SCALED)
                                 IMDRAWELLIPSE ← (FUNCTION \DRAWELLIPSE.SCALED)
                                 IMCLIPPINGREGION ← (FUNCTION \CLIPPINGREGION.SCALED)
                                 IMOPERATION ← (FUNCTION \OPERATION.SCALED)
                                 IMSPACEFACTOR ← (FUNCTION \SPACEFACTOR.SCALED)
                                 IMCHARSET ← (FUNCTION \CHARSET.SCALED)
                                 IMROTATE ← (FUNCTION \ROTATE.SCALED)
                                 IMDRAWARC ← (FUNCTION \DRAWARC.SCALED)
                                 IMDRAWPOINT ← (FUNCTION \DRAWPOINT.SCALED])

(OPENIMAGESTREAM.SCALED
  [LAMBDA (IMAGESTREAM OPTIONS)                              (* cdl "26-Jan-87 09:23")
                                                             (* DECLARATIONS%: (RECORD PAIR
                                                             (KEY VALUE)))
    (LET (STREAM SCALE)
         [SETQ OPTIONS (for PAIR on OPTIONS by (CDDR PAIR)
                          when (with PAIR PAIR (SELECTQ KEY
                                                   (SCALE (SETQ SCALE VALUE)
                                                          NIL)
                                                   T)) join (with PAIR PAIR (LIST KEY VALUE]
         (with STREAM (SETQ STREAM (create STREAM
                                          IMAGEDATA ← (create SCALEDIMAGEDATA
                                                             IMAGESTREAM ← IMAGESTREAM)
                                          IMAGEOPS ← (create IMAGEOPS
                                                            IMFONTCREATE ← (with IMAGEOPS
                                                                                 (fetch (STREAM
                                                                                         IMAGEOPS)
                                                                                    of IMAGESTREAM)
                                                                                 IMFONTCREATE)
                                                        reusing \SCALEDIMAGEOPS)
                                          OUTCHARFN ← (FUNCTION \OUTCHAR.SCALED)
                                          ACCESS ← 'OUTPUT
                                          DEVICE ← \NULLFDEV))
               (SETQ STRMBOUTFN (FUNCTION \BOUT.SCALED)))
         (if SCALE
             then (DSPSCALE! SCALE IMAGESTREAM))
         STREAM])
)
(DEFINEQ

(\BACKCOLOR.SCALED
  [LAMBDA (STREAM COLOR)                                     (* cdl "26-Jan-87 09:04")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (IMAGEOP 'IMBACKCOLOR IMAGESTREAM IMAGESTREAM COLOR])

(\BITBLT.SCALED
  [LAMBDA (SOURCEBITMAP SOURCELEFT SOURCEBOTTOM STREAM DESTINATIONLEFT DESTINATIONBOTTOM WIDTH HEIGHT 
                 SOURCETYPE OPERATION TEXTURE CLIPPINGREGION)(* cdl "26-Jan-87 10:37")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (BITBLT SOURCEBITMAP SOURCELEFT SOURCEBOTTOM IMAGESTREAM (DSPSCALE.XPOSITION 
                                                                          DESTINATIONLEFT IMAGESTREAM
                                                                          )
                 (DSPSCALE.YPOSITION DESTINATIONBOTTOM IMAGESTREAM)
                 WIDTH HEIGHT SOURCETYPE OPERATION TEXTURE (DSPSCALE.REGION CLIPPINGREGION 
                                                                  IMAGESTREAM])

(\BLTSHADE.SCALED
  [LAMBDA (TEXTURE STREAM DESTINATIONLEFT DESTINATIONBOTTOM WIDTH HEIGHT OPERATION CLIPPINGREGION)
                                                             (* cdl "26-Jan-87 10:05")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (IMAGEOP 'IMBLTSHADE IMAGESTREAM TEXTURE IMAGESTREAM (DSPSCALE.XPOSITION DESTINATIONLEFT 
                                                                      IMAGESTREAM)
                 (DSPSCALE.YPOSITION DESTINATIONBOTTOM IMAGESTREAM)
                 (DSPSCALE.NUMBER WIDTH IMAGESTREAM)
                 (DSPSCALE.NUMBER HEIGHT IMAGESTREAM)
                 OPERATION
                 (DSPSCALE.REGION CLIPPINGREGION IMAGESTREAM])

(\BOTTOMMARGIN.SCALED
  [LAMBDA (STREAM YPOSITION)                                 (* cdl "26-Jan-87 08:55")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (DSPUNSCALE.YPOSITION (IMAGEOP 'IMBOTTOMMARGIN IMAGESTREAM IMAGESTREAM
                                       (if YPOSITION
                                           then (DSPSCALE.YPOSITION YPOSITION IMAGESTREAM)))
                 IMAGESTREAM])

(\BOUT.SCALED
  [LAMBDA (STREAM BYTE)                                      (* cdl "26-Jan-87 08:49")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (BOUT IMAGESTREAM BYTE])

(\CHARSET.SCALED
  [LAMBDA (STREAM CHARACTERSET)                              (* cdl "26-Jan-87 08:49")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (IMAGEOP 'IMCHARSET IMAGESTREAM IMAGESTREAM CHARACTERSET])

(\CHARWIDTH.SCALED
  [LAMBDA (STREAM CHARCODE)                                  (* cdl "26-Jan-87 09:50")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (DSPUNSCALE.CHARACTER (IMAGEOP 'IMCHARWIDTH IMAGESTREAM IMAGESTREAM CHARCODE)
                 (DSPFONT NIL IMAGESTREAM)
                 IMAGESTREAM])

(\CHARWIDTHY.SCALED
  [LAMBDA (STREAM CHARCODE)                                  (* cdl "26-Jan-87 10:17")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (DSPUNSCALE.CHARACTER (IMAGEOP 'IMCHARWIDTHY IMAGESTREAM IMAGESTREAM CHARCODE)
                 (DSPFONT NIL IMAGESTREAM)
                 IMAGESTREAM])

(\CLIPPINGREGION.SCALED
  [LAMBDA (STREAM REGION)                                    (* cdl "26-Jan-87 09:48")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (DSPUNSCALE.REGION (IMAGEOP 'IMCLIPPINGREGION IMAGESTREAM IMAGESTREAM
                                    (if REGION
                                        then (DSPSCALE.REGION REGION IMAGESTREAM)))
                 IMAGESTREAM])

(\CLOSEFN.SCALED
  [LAMBDA (STREAM)                                           (* cdl "26-Jan-87 08:49")
    (with STREAM STREAM (PROG1 (CLOSEF (with SCALEDIMAGEDATA IMAGEDATA IMAGESTREAM))
                               (SETQ IMAGEDATA NIL])

(\COLOR.SCALED
  [LAMBDA (STREAM COLOR)                                     (* cdl "26-Jan-87 08:57")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (IMAGEOP 'IMCOLOR IMAGESTREAM IMAGESTREAM COLOR])

(\DRAWARC.SCALED
  [LAMBDA (STREAM CENTERX CENTERY RADIUS STARTANGLE NDEGREES BRUSH DASHING)
                                                             (* ; "Edited 14-Sep-87 14:30 by cdl")

    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (IMAGEOP 'IMDRAWARC IMAGESTREAM IMAGESTREAM (DSPSCALE.XPOSITION CENTERX IMAGESTREAM)
                 (DSPSCALE.YPOSITION CENTERY IMAGESTREAM)
                 (DSPSCALE.NUMBER RADIUS IMAGESTREAM)
                 STARTANGLE NDEGREES (DSPSCALE.BRUSH BRUSH IMAGESTREAM)
                 (DSPSCALE.DASHING DASHING IMAGESTREAM])

(\DRAWCIRCLE.SCALED
  [LAMBDA (STREAM CENTERX CENTERY RADIUS BRUSH DASHING)      (* cdl "26-Jan-87 09:03")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (IMAGEOP 'IMDRAWCIRCLE IMAGESTREAM IMAGESTREAM (DSPSCALE.XPOSITION CENTERX IMAGESTREAM)
                 (DSPSCALE.YPOSITION CENTERY IMAGESTREAM)
                 (DSPSCALE.NUMBER RADIUS IMAGESTREAM)
                 (DSPSCALE.BRUSH BRUSH IMAGESTREAM)
                 (DSPSCALE.DASHING DASHING IMAGESTREAM])

(\DRAWCURVE.SCALED
  [LAMBDA (STREAM KNOTS CLOSED BRUSH DASHING)                (* cdl "26-Jan-87 09:36")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (IMAGEOP 'IMDRAWCURVE IMAGESTREAM IMAGESTREAM (DSPSCALE.POINTS KNOTS IMAGESTREAM)
                 CLOSED
                 (DSPSCALE.BRUSH BRUSH IMAGESTREAM)
                 (DSPSCALE.DASHING DASHING IMAGESTREAM])

(\DRAWELLIPSE.SCALED
  [LAMBDA (STREAM CENTERX CENTERY SEMIMINORRADIUS SEMIMAJORRADIUS ORIENTATION BRUSH DASHING)
                                                             (* cdl "26-Jan-87 09:26")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (IMAGEOP 'IMDRAWELLIPSE IMAGESTREAM IMAGESTREAM (DSPSCALE.XPOSITION CENTERX IMAGESTREAM)
                 (DSPSCALE.YPOSITION CENTERY IMAGESTREAM)
                 (DSPSCALE.NUMBER SEMIMINORRADIUS IMAGESTREAM)
                 (DSPSCALE.NUMBER SEMIMAJORRADIUS IMAGESTREAM)
                 ORIENTATION
                 (DSPSCALE.BRUSH BRUSH IMAGESTREAM)
                 (DSPSCALE.DASHING DASHING IMAGESTREAM])

(\DRAWLINE.SCALED
  [LAMBDA (STREAM X1 Y1 X2 Y2 WIDTH OPERATION COLOR DASHING) (* cdl "26-Jan-87 09:41")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (IMAGEOP 'IMDRAWLINE IMAGESTREAM IMAGESTREAM (DSPSCALE.XPOSITION X1 IMAGESTREAM)
                 (DSPSCALE.YPOSITION Y1 IMAGESTREAM)
                 (DSPSCALE.XPOSITION X2 IMAGESTREAM)
                 (DSPSCALE.YPOSITION Y2 IMAGESTREAM)
                 (DSPSCALE.WIDTH WIDTH IMAGESTREAM)
                 OPERATION COLOR (DSPSCALE.DASHING DASHING IMAGESTREAM])

(\DRAWPOINT.SCALED
  [LAMBDA (STREAM X Y BRUSH OPERATION)                       (* ; "Edited 14-Sep-87 14:30 by cdl")

    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (IMAGEOP 'IMDRAWPOINT IMAGESTREAM IMAGESTREAM (DSPSCALE.XPOSITION X IMAGESTREAM)
                 (DSPSCALE.YPOSITION Y IMAGESTREAM)
                 (DSPSCALE.BRUSH BRUSH IMAGESTREAM)
                 OPERATION])

(\DRAWPOLYGON.SCALED
  [LAMBDA (STREAM KNOTS CLOSED BRUSH DASHING)                (* cdl "26-Jan-87 09:37")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (IMAGEOP 'IMDRAWPOLYGON IMAGESTREAM IMAGESTREAM (DSPSCALE.POINTS KNOTS IMAGESTREAM)
                 CLOSED
                 (DSPSCALE.BRUSH BRUSH IMAGESTREAM)
                 (DSPSCALE.DASHING DASHING IMAGESTREAM])

(\FILLCIRCLE.SCALED
  [LAMBDA (STREAM CENTERX CENTERY RADIUS TEXTURE)            (* cdl "26-Jan-87 08:59")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (IMAGEOP 'IMFILLCIRCLE IMAGESTREAM IMAGESTREAM (DSPSCALE.XPOSITION CENTERX IMAGESTREAM)
                 (DSPSCALE.YPOSITION CENTERY IMAGESTREAM)
                 (DSPSCALE.NUMBER RADIUS IMAGESTREAM)
                 TEXTURE])

(\FILLPOLYGON.SCALED
  [LAMBDA (STREAM KNOTS TEXTURE)                             (* cdl "26-Jan-87 09:38")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (IMAGEOP 'IMDRAWPOLYGON IMAGESTREAM IMAGESTREAM (DSPSCALE.POINTS KNOTS IMAGESTREAM)
                 TEXTURE])

(\FONT.SCALED
  [LAMBDA (STREAM FONT)                                      (* cdl "26-Jan-87 09:13")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (IMAGEOP 'IMFONT IMAGESTREAM IMAGESTREAM FONT])

(\LEFTMARGIN.SCALED
  [LAMBDA (STREAM XPOSITION)                                 (* cdl "26-Jan-87 08:50")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (DSPUNSCALE.XPOSITION (IMAGEOP 'IMLEFTMARGIN IMAGESTREAM IMAGESTREAM
                                       (if XPOSITION
                                           then (DSPSCALE.XPOSITION XPOSITION IMAGESTREAM)))
                 IMAGESTREAM])

(\LINEFEED.SCALED
  [LAMBDA (STREAM DELTAY)                                    (* cdl "26-Jan-87 09:28")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (DSPUNSCALE.NUMBER (IMAGEOP 'IMLINEFEED IMAGESTREAM IMAGESTREAM
                                    (if DELTAY
                                        then (DSPSCALE.NUMBER DELTAY IMAGESTREAM)))
                 IMAGESTREAM])

(\MOVETO.SCALED
  [LAMBDA (STREAM X Y)                                       (* cdl "26-Jan-87 09:30")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (IMAGEOP 'IMMOVETO IMAGESTREAM IMAGESTREAM (DSPSCALE.XPOSITION X IMAGESTREAM)
                 (DSPSCALE.YPOSITION Y IMAGESTREAM])

(\NEWPAGE.SCALED
  [LAMBDA (STREAM)                                           (* cdl "26-Jan-87 09:10")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (IMAGEOP 'IMNEWPAGE IMAGESTREAM IMAGESTREAM])

(\OPERATION.SCALED
  [LAMBDA (STREAM OPERATION)                                 (* cdl "26-Jan-87 08:50")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (IMAGEOP 'IMOPERATION IMAGESTREAM IMAGESTREAM OPERATION])

(\RESET.SCALED
  [LAMBDA (STREAM)                                           (* cdl "26-Jan-87 09:09")
    (with STREAM STREAM (SETQ CHARPOSITION 0)
          (with SCALEDIMAGEDATA IMAGEDATA (IMAGEOP 'IMRESET IMAGESTREAM IMAGESTREAM])

(\RIGHTMARGIN.SCALED
  [LAMBDA (STREAM XPOSITION)                                 (* cdl "26-Jan-87 08:50")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (DSPUNSCALE.XPOSITION (IMAGEOP 'IMRIGHTMARGIN IMAGESTREAM IMAGESTREAM
                                       (if XPOSITION
                                           then (DSPSCALE.XPOSITION XPOSITION IMAGESTREAM)))
                 IMAGESTREAM])

(\ROTATE.SCALED
  [LAMBDA (STREAM ROTATION)                                  (* ; "Edited 14-Sep-87 14:22 by cdl")

    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (IMAGEOP 'IMROTATE IMAGESTREAM IMAGESTREAM ROTATION])

(\SCALE.SCALED
  [LAMBDA (STREAM SCALE)                                     (* cdl "26-Jan-87 09:34")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (if SCALE
              then (DSPSCALE! SCALE IMAGESTREAM)
            else (IMAGEOP 'IMSCALE IMAGESTREAM IMAGESTREAM])

(\SCALEDBITBLT.SCALED
  [LAMBDA (SOURCEBITMAP SOURCELEFT SOURCEBOTTOM STREAM DESTINATIONLEFT DESTINATIONBOTTOM WIDTH HEIGHT 
                 SOURCETYPE OPERATION TEXTURE CLIPPINGREGION SCALE)
                                                             (* cdl "26-Jan-87 10:38")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (SCALEDBITBLT SOURCEBITMAP SOURCELEFT SOURCEBOTTOM IMAGESTREAM (DSPSCALE.XPOSITION 
                                                                                DESTINATIONLEFT 
                                                                                IMAGESTREAM)
                 (DSPSCALE.YPOSITION DESTINATIONBOTTOM IMAGESTREAM)
                 WIDTH HEIGHT SOURCETYPE OPERATION TEXTURE (DSPSCALE.REGION CLIPPINGREGION 
                                                                  IMAGESTREAM)
                 SCALE])

(\SPACEFACTOR.SCALED
  [LAMBDA (STREAM FACTOR)                                    (* cdl "26-Jan-87 09:46")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (DSPUNSCALE.NUMBER (IMAGEOP 'IMSPACEFACTOR IMAGESTREAM IMAGESTREAM
                                    (if FACTOR
                                        then (DSPSCALE.NUMBER FACTOR IMAGESTREAM)))
                 IMAGESTREAM])

(\STRINGWIDTH.SCALED
  [LAMBDA (STREAM STRING RDTBL)                              (* cdl "26-Jan-87 09:45")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (DSPUNSCALE.CHARACTER (IMAGEOP 'IMSTRINGWIDTH IMAGESTREAM IMAGESTREAM STRING RDTBL)
                 (DSPFONT NIL IMAGESTREAM)
                 IMAGESTREAM])

(\TERPRI.SCALED
  [LAMBDA (STREAM)                                           (* cdl "26-Jan-87 09:06")
    (with STREAM STREAM (SETQ CHARPOSITION 0)
          (with SCALEDIMAGEDATA IMAGEDATA (IMAGEOP 'IMTERPRI IMAGESTREAM IMAGESTREAM])

(\TOPMARGIN.SCALED
  [LAMBDA (STREAM YPOSITION)                                 (* cdl "26-Jan-87 08:54")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (DSPUNSCALE.YPOSITION (IMAGEOP 'IMTOPMARGIN IMAGESTREAM IMAGESTREAM
                                       (if YPOSITION
                                           then (DSPSCALE.YPOSITION YPOSITION IMAGESTREAM)))
                 IMAGESTREAM])

(\XPOSITION.SCALED
  [LAMBDA (STREAM XPOSITION)                                 (* cdl "26-Jan-87 08:51")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (DSPUNSCALE.XPOSITION (IMAGEOP 'IMXPOSITION IMAGESTREAM IMAGESTREAM
                                       (if XPOSITION
                                           then (DSPSCALE.XPOSITION XPOSITION IMAGESTREAM)))
                 IMAGESTREAM])

(\YPOSITION.SCALED
  [LAMBDA (STREAM YPOSITION)                                 (* cdl "26-Jan-87 08:51")
    (with SCALEDIMAGEDATA (with STREAM STREAM IMAGEDATA)
          (DSPUNSCALE.YPOSITION (IMAGEOP 'IMYPOSITION IMAGESTREAM IMAGESTREAM
                                       (if YPOSITION
                                           then (DSPSCALE.YPOSITION YPOSITION IMAGESTREAM)))
                 IMAGESTREAM])

(\OUTCHAR.SCALED
  [LAMBDA (STREAM CHARCODE)                                  (* cdl "26-Jan-87 10:20")
    [if (EQ CHARCODE (CHARCODE EOL))
        then (with STREAM STREAM (SETQ CHARPOSITION 0))
      else (freplace CHARPOSITION of STREAM with (\LOLOC (\ADDBASE (ffetch CHARPOSITION of STREAM)
                                                                1]
    (BOUT STREAM CHARCODE])
)
(* * Self Scaling DSP* Functions)

(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])

(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])

(DRAWARC!
  [LAMBDA (CENTERX CENTERY RADIUS STARTANGLE NDEGREES BRUSH DASHING STREAM)
                                                             (* ; "Edited 14-Sep-87 14:34 by cdl")

    (DRAWARC (DSPSCALE.XPOSITION CENTERX STREAM)
           (DSPSCALE.YPOSITION CENTERY STREAM)
           (DSPSCALE.NUMBER RADIUS STREAM)
           STARTANGLE NDEGREES (DSPSCALE.BRUSH BRUSH STREAM)
           (DSPSCALE.DASHING DASHING STREAM)
           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])

(DRAWPOINT!
  [LAMBDA (X Y BRUSH STREAM OPERATION)                       (* ; "Edited 14-Sep-87 14:36 by cdl")

    (DRAWPOINT (DSPSCALE.XPOSITION X STREAM)
           (DSPSCALE.YPOSITION Y STREAM)
           (DSPSCALE.BRUSH BRUSH STREAM)
           STREAM OPERATION])

(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])

(DSPTRANSLATE!
  [LAMBDA (Tx.OR.POSITION Ty.OR.STREAM STREAM.OR.NIL)        (* ; "Edited 14-Sep-87 15:02 by cdl")

    (if (POSITIONP Tx.OR.POSITION)
        then                                                 (* Koto Compatibility)
             (STREAMPROP (GETSTREAM Ty.OR.STREAM)
                    'TRANSLATE Tx.OR.POSITION)
      else (STREAMPROP (GETSTREAM STREAM.OR.NIL 'TRANSLATE (CREATEPOSITION Tx.OR.POSITION 
                                                                  Ty.OR.STREAM])

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

(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])

(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])
)
(* * Low Level Scaling Functions)

(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 "27-Jan-87 11:32")
    (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])
)
(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]
)
(* * etc.)

(DEFINEQ

(\TRANSLATE.DISPLAY
  [LAMBDA (STREAM Tx Ty)                                     (* ; "Edited 14-Sep-87 14:51 by cdl")

    (if (AND (POSITIONP Tx)
             (IMAGESTREAMTYPEP (GETSTREAM Ty)
                    'DISPLAY))
        then (DSPTRANSLATE! Tx Ty)
      else (DSPTRANSLATE! (CREATEPOSITION Tx Ty)
                  STREAM])
)
(DECLARE%: DONTCOPY 
(DECLARE%: EVAL@COMPILE

(RECORD SCALEDIMAGEDATA (IMAGESTREAM))

(RECORD CONVERT (SOURCE . DESTINATION))
)
)

(ADDTOVAR IMAGESTREAMTYPES (SCALED (OPENSTREAM OPENIMAGESTREAM.SCALED)))

(RPAQ? \SCALEDIMAGEOPS NIL)

(RPAQ? \NULLFDEV NIL)
(DECLARE%: DOEVAL@COMPILE DONTCOPY

(GLOBALVARS \SCALEDIMAGEOPS \NULLFDEV)
)

(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)
)
(MOVD? 'DSPUNITS! 'DSPUNITS)
(INITSCALEDIMAGESTREAM)
(PUTPROPS DSPSCALE COPYRIGHT ("Stanford University" 1985 1986 1987))
(DECLARE%: DONTCOPY
  (FILEMAP (NIL (3314 8774 (INITSCALEDIMAGESTREAM 3324 . 6831) (OPENIMAGESTREAM.SCALED 6833 . 8772)) (
8775 24646 (\BACKCOLOR.SCALED 8785 . 9031) (\BITBLT.SCALED 9033 . 9833) (\BLTSHADE.SCALED 9835 . 10583
) (\BOTTOMMARGIN.SCALED 10585 . 11040) (\BOUT.SCALED 11042 . 11254) (\CHARSET.SCALED 11256 . 11505) (
\CHARWIDTH.SCALED 11507 . 11855) (\CHARWIDTHY.SCALED 11857 . 12207) (\CLIPPINGREGION.SCALED 12209 . 
12654) (\CLOSEFN.SCALED 12656 . 12917) (\COLOR.SCALED 12919 . 13157) (\DRAWARC.SCALED 13159 . 13784) (
\DRAWCIRCLE.SCALED 13786 . 14308) (\DRAWCURVE.SCALED 14310 . 14729) (\DRAWELLIPSE.SCALED 14731 . 15453
) (\DRAWLINE.SCALED 15455 . 16035) (\DRAWPOINT.SCALED 16037 . 16468) (\DRAWPOLYGON.SCALED 16470 . 
16893) (\FILLCIRCLE.SCALED 16895 . 17327) (\FILLPOLYGON.SCALED 17329 . 17638) (\FONT.SCALED 17640 . 
17875) (\LEFTMARGIN.SCALED 17877 . 18328) (\LINEFEED.SCALED 18330 . 18763) (\MOVETO.SCALED 18765 . 
19093) (\NEWPAGE.SCALED 19095 . 19331) (\OPERATION.SCALED 19333 . 19583) (\RESET.SCALED 19585 . 19838)
 (\RIGHTMARGIN.SCALED 19840 . 20293) (\ROTATE.SCALED 20295 . 20551) (\SCALE.SCALED 20553 . 20877) (
\SCALEDBITBLT.SCALED 20879 . 21795) (\SPACEFACTOR.SCALED 21797 . 22236) (\STRINGWIDTH.SCALED 22238 . 
22594) (\TERPRI.SCALED 22596 . 22851) (\TOPMARGIN.SCALED 22853 . 23302) (\XPOSITION.SCALED 23304 . 
23753) (\YPOSITION.SCALED 23755 . 24204) (\OUTCHAR.SCALED 24206 . 24644)) (24687 39475 (
CENTERPRINTINREGION! 24697 . 24960) (CHARWIDTH! 24962 . 25153) (CHARWIDTHY! 25155 . 25348) (
CURSORPOSITION! 25350 . 25724) (BITBLT! 25726 . 26275) (BITMAPBIT! 26277 . 26510) (BLTSHADE! 26512 . 
27048) (DSPBACKUP! 27050 . 27290) (DSPBOTTOMMARGIN! 27292 . 27629) (DSPCLIPPINGREGION! 27631 . 27960) 
(DRAWBETWEEN! 27962 . 28331) (DRAWARC! 28333 . 28815) (DRAWCIRCLE! 28817 . 29196) (DRAWCURVE! 29198 . 
29490) (DRAWELLIPSE! 29492 . 30054) (DRAWLINE! 30056 . 30470) (DRAWPOINT! 30472 . 30764) (DRAWPOLYGON!
 30766 . 31063) (DRAWTO! 31065 . 31381) (FILLCIRCLE! 31383 . 31676) (FILLPOLYGON! 31678 . 31870) (
FONTPROP! 31872 . 32157) (DSPLEFTMARGIN! 32159 . 32490) (DSPLINEFEED! 32492 . 32803) (GETPOSITION! 
32805 . 32994) (MOVETO! 32996 . 33214) (MOVETOUPPERLEFT! 33216 . 33453) (DSPRIGHTMARGIN! 33455 . 33789
) (DSPSCALE! 33791 . 34603) (RELDRAWTO! 34605 . 34923) (RELMOVETO! 34925 . 35145) (SCALEDBITBLT! 35147
 . 35786) (STRINGREGION! 35788 . 36017) (STRINGWIDTH! 36019 . 36219) (DSPSPACEFACTOR! 36221 . 36541) (
DSPTRANSLATE! 36543 . 37073) (DSPTOPMARGIN! 37075 . 37403) (DSPUNITS! 37405 . 38147) (DSPXOFFSET! 
38149 . 38480) (DSPXPOSITION! 38482 . 38810) (DSPYOFFSET! 38812 . 39143) (DSPYPOSITION! 39145 . 39473)
) (39516 48073 (DSPSCALE.BRUSH 39526 . 40393) (DSPSCALE.DASHING 40395 . 40746) (DSPSCALE.POINTS 40748
 . 41257) (DSPSCALE.REGION 41259 . 41912) (DSPSCALE.NUMBER 41914 . 42747) (DSPSCALE.POSITION 42749 . 
43157) (DSPSCALE.XPOSITION 43159 . 43676) (DSPSCALE.YPOSITION 43678 . 44195) (DSPSCALE.WIDTH 44197 . 
44421) (DSPUNSCALE.REGION 44423 . 45078) (DSPUNSCALE.POSITION 45080 . 45486) (DSPUNSCALE.NUMBER 45488
 . 46943) (DSPUNSCALE.CHARACTER 46945 . 48071)) (48372 48751 (\TRANSLATE.DISPLAY 48382 . 48749)))))
STOP