(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)(FILECREATED "20-Jul-88 17:47:02" |{MCS:MCS:STANFORD}<LANE>HPGL.;24| 45342        changes to%:  (FNS \DRAWLINE.HPGL \FONT.HPGL \INIT.HPGL HARDCOPYW.HPGL)      previous date%: "20-Jul-88 17:34:42" |{MCS:MCS:STANFORD}<LANE>HPGL.;23|)(* "Copyright (c) 1985, 1986, 1987, 1988 by Stanford University.  All rights reserved.")(PRETTYCOMPRINT HPGLCOMS)(RPAQQ HPGLCOMS        ((* * User Functions)        (FNS MAKEHPGL OPENHPGLSTREAM HARDCOPYW.HPGL)        (* * ImageOp Functions)        (FNS \BITBLT.HPGL \BLTSHADE.HPGL \CLOSEFN.HPGL \COLOR.HPGL \DRAWARC.HPGL \DRAWCIRCLE.HPGL              \DRAWCURVE.HPGL \DRAWLINE.HPGL \DRAWPOLYGON.HPGL \FILLCIRCLE.HPGL \FONT.HPGL              \LEFTMARGIN.HPGL \LINEFEED.HPGL \MOVETO.HPGL \RESET.HPGL \RIGHTMARGIN.HPGL \ROTATE.HPGL             \SCALEDBITBLT.HPGL \STRINGWIDTH.HPGL \CLIPPINGREGION.HPGL \TERPRI.HPGL \XPOSITION.HPGL              \YPOSITION.HPGL)        (* * Internal Functions)        (FNS \DUMPSTRING.HPGL \FONTCREATE.HPGL \INIT.HPGL \OUTCHAR.HPGL \SEARCH.HPGL.FONTS \FILL.HPGL             \DASHING.HPGL)        (* * etc.)        (VARS HPGL.FONTS HPGL.OPTIONS HPGL.FONT.EXPANSIONS HPGL.DASHING (SKETCHINCOLORFLG T))        (INITVARS (HPGL.TERMINATOR (CHARACTER (CHARCODE ;)))               (HPGL.SEPARATOR (CHARACTER (CHARCODE %,)))               (HPGL.TEXT.TERMINATOR (CHARACTER (CHARCODE ^A)))               HPGL.CHORD.ANGLE HPGL.PATTERN.LENGTH \HPGLIMAGEOPS \NULLFDEV SK.DASHING.PATTERNS)        (GLOBALVARS HPGL.FONTS HPGL.OPTIONS HPGL.FONT.EXPANSIONS HPGL.DASHING HPGL.TERMINATOR                HPGL.SEPARATOR HPGL.TEXT.TERMINATOR HPGL.CHORD.ANGLE HPGL.PATTERN.LENGTH \HPGLIMAGEOPS               \NULLFDEV)        (DECLARE%: DOEVAL@COMPILE DONTCOPY (FILES UTILISOPRS)               (ALISTS (PRINTOUTMACROS !, !; !!;))               (RECORDS PLOTTERDATA))        [ADDVARS (PRINTERTYPES ((PLOTTER HPGL)                                (CANPRINT (HPGL))                                (STATUS TRUE)                                (BITMAPFILE (HARDCOPYW.HPGL FILE BITMAP SCALEFACTOR REGION ROTATION                                                    TITLE))                                (PROPERTIES NILL)))               [PRINTFILETYPES (HPGL (EXTENSION (HPGL PLOT))                                     (CONVERSION (TEXT MAKEHPGL TEDIT                                                       (LAMBDA (FILE PFILE)                                                              (SETQ FILE (OPENTEXTSTREAM FILE))                                                              (TEDIT.FORMAT.HARDCOPY FILE PFILE T NIL                                                                     NIL NIL 'HPGL)                                                              (CLOSEF? FILE)                                                              PFILE]               (IMAGESTREAMTYPES (HPGL (OPENSTREAM OPENHPGLSTREAM)                                       (FONTCREATE \FONTCREATE.HPGL)                                       (FONTSAVAILABLE \SEARCH.HPGL.FONTS)                                       (CREATECHARSET NILL]        (P [if (FGETD (FUNCTION SK.DASHING.LABEL))               then               (for ENTRY in HPGL.DASHING do (push SK.DASHING.PATTERNS (LIST (SK.DASHING.LABEL                                                                              (CDR ENTRY))                                                                             (CDR ENTRY]           (\INIT.HPGL))))(* * User Functions)(DEFINEQ(MAKEHPGL  [LAMBDA (FILE PFILE FONTS HEADING TABS)                (* cdl "12-Jun-85 11:22")    (TEXTTOIMAGEFILE FILE PFILE 'HPGL FONTS HEADING TABS])(OPENHPGLSTREAM  [LAMBDA (FILE OPTIONS)                                 (* ; "Edited  8-Sep-87 08:50 by cdl")                                                             (* DECLARATIONS%: (RECORD PAIR                                                           (KEY VALUE)))    (LET (HPGLSTREAM POSITION (STREAM (OPENSTREAM FILE 'OUTPUT))                (SCALE (create POSITION                              XCOORD _ SCREENWIDTH                              YCOORD _ SCREENHEIGHT)))         (if (AND (SETQ POSITION (LISTGET OPTIONS 'SCALE))                      (POSITIONP POSITION))             then (SETQ SCALE POSITION))         (SETQ HPGLSTREAM (create STREAM                                 IMAGEOPS _ \HPGLIMAGEOPS                                 IMAGEDATA _ (create PLOTTERDATA                                                    PD.STREAM _ STREAM                                                    PD.SCALE _ SCALE                                                    PD.RIGHTMARGIN _ (with POSITION SCALE XCOORD)                                                    )                                 OUTCHARFN _ (FUNCTION \OUTCHAR.HPGL)                                 CBUFPTR _ NIL                                 CBUFSIZE _ 0                                 DEVICE _ \NULLFDEV using STREAM))         (with STREAM STREAM (SETQ LINELENGTH MAX.SMALLP))         (with POSITION SCALE                (printout STREAM "DF" !; "SC" "0" !, XCOORD !, "0" !, YCOORD !; "DT" !!; !;))         [bind ENTRY for PAIR on OPTIONS by (CDDR PAIR)            do (with PAIR PAIR (if (SETQ ENTRY (ASSOC KEY HPGL.OPTIONS))                                           then (printout STREAM (CDR ENTRY)                                                           VALUE !;]         (DSPFONT DEFAULTFONT HPGLSTREAM)         (DSPRESET HPGLSTREAM)         HPGLSTREAM])(HARDCOPYW.HPGL  [LAMBDA (FILE BITMAP SCALEFACTOR REGION ROTATION TITLE)(* ; "Edited 20-Jul-88 17:11 by cdl")    (LET ((PFILE (OPENHPGLSTREAM FILE)))         (with REGION REGION (BITBLT BITMAP LEFT BOTTOM PFILE NIL NIL WIDTH HEIGHT))         (CLOSEF PFILE]))(* * ImageOp Functions)(DEFINEQ(\BITBLT.HPGL  [LAMBDA (BITMAP SOURCELEFT SOURCEBOTTOM STREAM DESTINATIONLEFT DESTINATIONBOTTOM WIDTH HEIGHT                  SOURCETYPE OPERATION TEXTURE CLIPPINGREGION CLIPPEDSOURCELEFT CLIPPEDSOURCEBOTTOM)                                                             (* ; "Edited  8-Sep-87 08:41 by cdl")    (\DUMPSTRING.HPGL STREAM)    (bind (FILESTREAM _ (with PLOTTERDATA (with STREAM STREAM IMAGEDATA)                                   PD.STREAM)) for Y from SOURCEBOTTOM       to (SUB1 (PLUS SOURCEBOTTOM HEIGHT)) as J from DESTINATIONBOTTOM       do (bind PI (STATE _ 0) for X from SOURCELEFT                 to (SUB1 (PLUS SOURCELEFT WIDTH)) as I from DESTINATIONLEFT                 do (if (NEQ STATE (BITMAPBIT BITMAP X Y))                            then (if (ZEROP (SETQ STATE (IDIFFERENCE 1 STATE)))                                         then (printout FILESTREAM "PD")                                               (if (NEQ PI (SUB1 I))                                                   then (printout FILESTREAM (SUB1 I)                                                                   !, J))                                               (printout FILESTREAM !;)                                       else (printout FILESTREAM "PU" I !, J !;))                                  (SETQ PI I))                 finally (if (NOT (ZEROP STATE))                                 then (printout FILESTREAM "PD")                                       (if (NEQ PI (SUB1 I))                                           then (printout FILESTREAM (SUB1 I)                                                           !, J))                                       (printout FILESTREAM !;))) finally (printout FILESTREAM                                                                                      "PU" !;))    T])(\BLTSHADE.HPGL  [LAMBDA (TEXTURE STREAM DESTINATIONLEFT DESTINATIONBOTTOM WIDTH HEIGHT OPERATION CLIPPINGREGION)                                                             (* ; "Edited 10-Nov-87 15:37 by cdl")    (SUB1VAR WIDTH)    (SUB1VAR HEIGHT)    (if (AND (OR (ZEROP WIDTH)                     (ZEROP HEIGHT))                 (EQ TEXTURE BLACKSHADE))        then                                             (* Get around bug in plotter                                                            hardware triggered by SKETCH boxes)              (DRAWLINE DESTINATIONLEFT DESTINATIONBOTTOM (PLUS DESTINATIONLEFT WIDTH)                     (PLUS DESTINATIONBOTTOM HEIGHT)                     NIL OPERATION STREAM)      else (IMAGEOP 'IMMOVETO STREAM STREAM DESTINATIONLEFT DESTINATIONBOTTOM)            (\FILL.HPGL STREAM TEXTURE)            (with PLOTTERDATA (with STREAM STREAM IMAGEDATA)                   (printout PD.STREAM "RA" (PLUS DESTINATIONLEFT WIDTH)                          !,                          (PLUS DESTINATIONBOTTOM HEIGHT)                          !;)))    T])(\CLOSEFN.HPGL  [LAMBDA (STREAM)                                       (* ; "Edited  8-Sep-87 08:34 by cdl")    (\DUMPSTRING.HPGL STREAM)    (with PLOTTERDATA (with STREAM STREAM IMAGEDATA)           (printout PD.STREAM "PU" !;)           (CLOSEF? PD.STREAM)           (SETQ PD.STREAM NIL))    T])(\COLOR.HPGL  [LAMBDA (STREAM COLOR)                                 (* ; "Edited  8-Dec-87 17:10 by cdl")                                                             (* DECLARATIONS%: (RECORD ENTRY                                                           (NAME . VALUES)))    (DECLARE (GLOBALVARS COLORNAMES))    (with PLOTTERDATA (with STREAM STREAM IMAGEDATA)           (PROG1 PD.COLOR               (if COLOR                   then [if (LITATOM COLOR)                                then (SETQ COLOR (for ENTRY in COLORNAMES as I                                                        from 1                                                        thereis (with ENTRY ENTRY                                                                           (EQ COLOR NAME))                                                        yield (DIFFERENCE (LENGTH COLORNAMES)                                                                         I)))                              elseif (RGBP COLOR)                                then (SETQ COLOR (for ENTRY in COLORNAMES as I                                                        from 1                                                        thereis (with ENTRY ENTRY                                                                           (EQUAL COLOR VALUES))                                                        yield (DIFFERENCE (LENGTH COLORNAMES)                                                                         I]                         (if (AND (FIXP COLOR)                                      (NEQ COLOR PD.COLOR))                             then (\DUMPSTRING.HPGL STREAM)                                   (printout PD.STREAM "SP" (ADD1 (SETQ PD.COLOR COLOR))                                          !;))))])(\DRAWARC.HPGL  [LAMBDA (STREAM CENTERX CENTERY RADIUS STARTANGLE NDEGREES BRUSH DASHING)                                                             (* ; "Edited 14-Sep-87 10:57 by cdl")    (DECLARE (SPECVARS . T))    (\DUMPSTRING.HPGL STREAM)    [if (LISTP BRUSH)        then (with BRUSH BRUSH (if BRUSHCOLOR                                           then (IMAGEOP 'IMCOLOR STREAM STREAM BRUSHCOLOR]    (RESETLST        [RESETSAVE NIL `(\DASHING.HPGL ,STREAM ,(\DASHING.HPGL STREAM DASHING]        [RESETSAVE NIL `(DSPCOLOR ,(IMAGEOP 'IMCOLOR STREAM STREAM (if (LISTP BRUSH)                                                                       then (with BRUSH BRUSH                                                                                       BRUSHCOLOR)))                               ,STREAM]        (with PLOTTERDATA (with STREAM STREAM IMAGEDATA)               (with POSITION PD.POSITION (printout PD.STREAM "PU" (SETQ XCOORD CENTERX)                                                     !,                                                     (SETQ YCOORD CENTERY)                                                     !; "EW" RADIUS !, (PLUS STARTANGLE 90)                                                     !, NDEGREES)                      (if HPGL.CHORD.ANGLE                          then (printout PD.STREAM !, HPGL.CHORD.ANGLE))                      (printout PD.STREAM !;))))    T])(\DRAWCIRCLE.HPGL  [LAMBDA (STREAM CENTERX CENTERY RADIUS BRUSH DASHING)  (* ; "Edited 14-Sep-87 10:54 by cdl")    (DECLARE (SPECVARS . T))    (\DUMPSTRING.HPGL STREAM)    [if (LISTP BRUSH)        then (with BRUSH BRUSH (if BRUSHCOLOR                                           then (IMAGEOP 'IMCOLOR STREAM STREAM BRUSHCOLOR]    (RESETLST        [RESETSAVE NIL `(\DASHING.HPGL ,STREAM ,(\DASHING.HPGL STREAM DASHING]        [RESETSAVE NIL `(DSPCOLOR ,(IMAGEOP 'IMCOLOR STREAM STREAM (if (LISTP BRUSH)                                                                       then (with BRUSH BRUSH                                                                                       BRUSHCOLOR)))                               ,STREAM]        (with PLOTTERDATA (with STREAM STREAM IMAGEDATA)               (with POSITION PD.POSITION (printout PD.STREAM "PU" (SETQ XCOORD CENTERX)                                                     !,                                                     (SETQ YCOORD CENTERY)                                                     !; "CI" RADIUS)                      (if HPGL.CHORD.ANGLE                          then (printout PD.STREAM !, HPGL.CHORD.ANGLE))                      (printout PD.STREAM !;))))    T])(\DRAWCURVE.HPGL  [LAMBDA (STREAM KNOTS CLOSED BRUSH DASHING)            (* ; "Edited  8-Sep-87 11:25 by cdl")    (DECLARE (SPECVARS . T))    (\DUMPSTRING.HPGL STREAM)    (if (FGETD 'DRAWCURVE.STREAM)        then (RESETLST                     [RESETSAVE NIL `(DSPCOLOR ,(IMAGEOP 'IMCOLOR STREAM STREAM                                                       (if (LISTP BRUSH)                                                           then (with BRUSH BRUSH BRUSHCOLOR)                                                              ))                                            ,STREAM]                     (DRAWCURVE.STREAM STREAM KNOTS CLOSED BRUSH DASHING))      else (IMAGEOP 'IMDRAWPOLYGON STREAM STREAM KNOTS CLOSED BRUSH DASHING])(\DRAWLINE.HPGL  [LAMBDA (STREAM X1 Y1 X2 Y2 WIDTH OPERATION COLOR DASHING)                                                             (* ; "Edited 20-Jul-88 17:45 by cdl")    (DECLARE (SPECVARS . T))    [if [AND DASHING (NOT (bind (DASHING _ (MKLIST DASHING)) for ENTRY in                                                                                          HPGL.DASHING                                 thereis (EQUAL DASHING (CDR ENTRY]        then                                             (* Not a hardware dashing pattern)              (DRAWDASHEDLINE X1 Y1 X2 Y2 (OR WIDTH 1)                     OPERATION STREAM COLOR DASHING)      else (\DUMPSTRING.HPGL STREAM)            (RESETLST                [RESETSAVE NIL `(\DASHING.HPGL ,STREAM ,(\DASHING.HPGL STREAM DASHING]                [RESETSAVE NIL `(DSPCOLOR ,(IMAGEOP 'IMCOLOR STREAM STREAM COLOR)                                       ,STREAM]                (with PLOTTERDATA (with STREAM STREAM IMAGEDATA)                       (with POSITION PD.POSITION                              (if [NOT (AND (OR (EQ X1 T)                                                    (EQ X1 XCOORD))                                                (OR (EQ Y1 T)                                                    (EQ Y1 YCOORD]                                  then (printout PD.STREAM "PU" (if (EQ X1 T)                                                                        then XCOORD                                                                      else X1)                                                  !,                                                  (if (EQ Y1 T)                                                      then YCOORD                                                    else Y1)                                                  !;))                              (printout PD.STREAM "PD" (SETQ XCOORD X2)                                     !,                                     (SETQ YCOORD Y2)                                     !;))))]    T])(\DRAWPOLYGON.HPGL  [LAMBDA (STREAM POINTS CLOSED BRUSH DASHING)           (* ; "Edited  8-Sep-87 08:22 by cdl")    (DECLARE (SPECVARS . T))    (\DUMPSTRING.HPGL STREAM)    (RESETLST        [RESETSAVE NIL `(\DASHING.HPGL ,STREAM ,(\DASHING.HPGL STREAM DASHING]        [RESETSAVE NIL `(DSPCOLOR ,(IMAGEOP 'IMCOLOR STREAM STREAM (if (LISTP BRUSH)                                                                       then (with BRUSH BRUSH                                                                                       BRUSHCOLOR)))                               ,STREAM]        (with PLOTTERDATA (with STREAM STREAM IMAGEDATA)               (with POSITION (CAR POINTS)                      (printout PD.STREAM "PU" XCOORD !, YCOORD !; "PD"))               (for POINT on (CDR POINTS) do (with POSITION (CAR POINT)                                                                (printout PD.STREAM XCOORD !, YCOORD)                                                                )                                                        (if (CDR POINT)                                                            then (printout PD.STREAM !,)))               (if CLOSED                   then (with POSITION (CAR POINTS)                                   (printout PD.STREAM XCOORD !, YCOORD)))               (PRINTOUT PD.STREAM !;)               (with POSITION (CAR (LAST POINTS))                      (create POSITION                             XCOORD _ XCOORD                             YCOORD _ YCOORD smashing PD.POSITION))))    T])(\FILLCIRCLE.HPGL  [LAMBDA (STREAM CENTERX CENTERY RADIUS TEXTURE)        (* ; "Edited 14-Sep-87 11:25 by cdl")    (\DUMPSTRING.HPGL STREAM)    (\FILL.HPGL STREAM TEXTURE)    (with PLOTTERDATA (with STREAM STREAM IMAGEDATA)           (with POSITION PD.POSITION (printout PD.STREAM "PU" (SETQ XCOORD CENTERX)                                                 !,                                                 (SETQ YCOORD CENTERY)                                                 !; "WG" RADIUS !, "0" !, "360")                  (if HPGL.CHORD.ANGLE                      then (printout PD.STREAM !, HPGL.CHORD.ANGLE))                  (printout PD.STREAM !;)))    T])(\FONT.HPGL  [LAMBDA (STREAM FONT)                                  (* ; "Edited 20-Jul-88 17:34 by cdl")    [if (type? FONTCLASS FONT)        then (SETQ FONT (FONTCLASSCOMPONENT FONT (IMAGESTREAMTYPE STREAM]    (with PLOTTERDATA (with STREAM STREAM IMAGEDATA)           (if (AND FONT (NEQ FONT PD.FONT))               then (\DUMPSTRING.HPGL STREAM)                     [with FONTDESCRIPTOR FONT (if (NEQ FONTFAMILY (fetch FONTFAMILY                                                                              of PD.FONT))                                                       then (printout PD.STREAM "CS"                                                                       (OR (CDR (FASSOC FONTFAMILY                                                                                        HPGL.FONTS))                                                                           (CONSTANT null))                                                                       !;))                            (if (NEQ ROTATION (fetch ROTATION of PD.FONT))                                then (printout PD.STREAM "DI")                                      (if (AND ROTATION (NOT (ZEROP ROTATION)))                                          then (printout PD.STREAM (COS ROTATION)                                                          !,                                                          (SIN ROTATION)))                                      (printout PD.STREAM !;))                            (with POSITION PD.SCALE (printout PD.STREAM "SR")                                   (PRINTNUM '(FLOAT NIL 3)                                          (QUOTIENT (QUOTIENT [TIMES FONTAVGCHARWIDTH                                                                     (with FONTFACE FONTFACE                                                                            (CDR (ASSOC EXPANSION                                                                                  HPGL.FONT.EXPANSIONS                                                                                        ]                                                           3)                                                 XCOORD)                                          PD.STREAM)                                   (printout PD.STREAM !,)                                   (PRINTNUM '(FLOAT NIL 3)                                          (QUOTIENT (TIMES \SFHeight 100.0)                                                 YCOORD)                                          PD.STREAM)                                   (printout PD.STREAM !;))                            (with FONTFACE FONTFACE                                   (if (NEQ SLOPE (fetch (FONTFACE SLOPE)                                                         of (fetch (FONTDESCRIPTOR FONTFACE)                                                                   of PD.FONT)))                                       then (printout PD.STREAM "SL" (SELECTQ SLOPE                                                                             (REGULAR (CONSTANT                                                                                       null))                                                                             (ITALIC 1)                                                                             (SHOULDNT))                                                       !;]                     (PROG1 PD.FONT (SETQ PD.FONT FONT))             else PD.FONT])(\LEFTMARGIN.HPGL  [LAMBDA (STREAM XPOSITION)                             (* cdl "25-Jun-85 15:33")    (with PLOTTERDATA (with STREAM STREAM IMAGEDATA)           (PROG1 PD.LEFTMARGIN               (if XPOSITION                   then (SETQ PD.LEFTMARGIN XPOSITION)))])(\LINEFEED.HPGL  [LAMBDA (STREAM DELTAY)                                (* cdl "24-Jul-85 08:01")    (MINUS (TIMES 2 (FONTPROP (with STREAM STREAM (with PLOTTERDATA IMAGEDATA PD.FONT))                           'HEIGHT])(\MOVETO.HPGL  [LAMBDA (STREAM X Y)                                   (* ; "Edited  8-Sep-87 10:39 by cdl")    (\DUMPSTRING.HPGL STREAM)    (with PLOTTERDATA (with STREAM STREAM IMAGEDATA)           (with POSITION PD.POSITION (printout PD.STREAM "PU" (SETQ XCOORD X)                                                 !,                                                 (SETQ YCOORD Y)                                                 !;)))    T])(\RESET.HPGL  [LAMBDA (STREAM)                                       (* cdl "19-Jul-85 16:30")    (with PLOTTERDATA (with STREAM STREAM IMAGEDATA)           (IMAGEOP 'IMMOVETO STREAM STREAM PD.LEFTMARGIN (PLUS (with POSITION PD.SCALE YCOORD)                                                                (IMAGEOP 'IMLINEFEED STREAM STREAM])(\RIGHTMARGIN.HPGL  [LAMBDA (STREAM XPOSITION)                             (* cdl "25-Jun-85 15:34")    (with PLOTTERDATA (with STREAM STREAM IMAGEDATA)           (PROG1 PD.RIGHTMARGIN               (if XPOSITION                   then (SETQ PD.RIGHTMARGIN XPOSITION)))])(\ROTATE.HPGL  [LAMBDA (STREAM ROTATION)                              (* ; "Edited  8-Sep-87 08:37 by cdl")    (with PLOTTERDATA (with STREAM STREAM IMAGEDATA)           (PROG1 PD.ROTATION               (if PD.ROTATION                   then (\DUMPSTRING.HPGL STREAM)                         (printout PD.STREAM "RO" PD.ROTATION !;)))])(\SCALEDBITBLT.HPGL  [LAMBDA (BITMAP SOURCELEFT SOURCEBOTTOM STREAM DESTINATIONLEFT DESTINATIONBOTTOM WIDTH HEIGHT                  SOURCETYPE OPERATION TEXTURE CLIPPINGREGION CLIPPEDSOURCELEFT CLIPPEDSOURCEBOTTOM                  SCALE)                                  (* ; "Edited  8-Sep-87 08:43 by cdl")    (\DUMPSTRING.HPGL STREAM)    (bind (FILESTREAM _ (with PLOTTERDATA (with STREAM STREAM IMAGEDATA)                                   PD.STREAM))           (SOURCEWIDTH _ (SUB1 (PLUS SOURCELEFT WIDTH))) for Y from SOURCEBOTTOM       to (SUB1 (PLUS SOURCEBOTTOM HEIGHT)) as J from DESTINATIONBOTTOM by SCALE       do       [for Z from J to (PLUS J (SUB1 SCALE))          do (bind PI LASTPOSITION (STATE _ 0) for X from SOURCELEFT to                                                                                           SOURCEWIDTH                    as I from DESTINATIONLEFT by SCALE                    do (if (NEQ STATE (BITMAPBIT BITMAP X Y))                               then (if (ZEROP (SETQ STATE (DIFFERENCE 1 STATE)))                                            then (printout FILESTREAM "PD")                                                  (if (NOT (IEQP PI (SUB1 I)))                                                      then (printout FILESTREAM (SUB1 I)                                                                      !, Z))                                                  (printout FILESTREAM !;)                                          else (printout FILESTREAM "PU" I !, Z !;))                                     (SETQ PI I))                    finally (if (NOT (ZEROP STATE))                                    then (printout FILESTREAM "PD")                                          (if (NOT (IEQP PI (SUB1 I)))                                              then (printout FILESTREAM (SUB1 I)                                                              !, Z))                                          (printout FILESTREAM !;] finally (printout FILESTREAM                                                                                       "PU" !;))    T])(\STRINGWIDTH.HPGL  [LAMBDA (STREAM STRING RDTBL)                          (* cdl "29-Apr-85 14:31")    (STRINGWIDTH STRING (DSPFONT NIL STREAM)           RDTBL RDTBL])(\CLIPPINGREGION.HPGL  [LAMBDA (STREAM REGION)                                (* cdl "16-Oct-85 10:57")    (with STREAM STREAM (with PLOTTERDATA IMAGEDATA (with POSITION PD.SCALE                                                                   (CREATEREGION 0 0 XCOORD YCOORD])(\TERPRI.HPGL  [LAMBDA (STREAM)                                       (* cdl "24-Jul-85 09:26")    (with PLOTTERDATA (with STREAM STREAM IMAGEDATA)           (with POSITION PD.POSITION (IMAGEOP 'IMMOVETO STREAM STREAM PD.LEFTMARGIN                                                 (PLUS YCOORD (IMAGEOP 'IMLINEFEED STREAM STREAM])(\XPOSITION.HPGL  [LAMBDA (STREAM XPOSITION)                             (* ; "Edited  8-Sep-87 08:32 by cdl")    (with PLOTTERDATA (with STREAM STREAM IMAGEDATA)           (with POSITION PD.POSITION (PROG1 XCOORD                                              (if XPOSITION                                                  then (\DUMPSTRING.HPGL STREAM)                                                        (printout PD.STREAM "PU" (SETQ XCOORD                                                                                   XPOSITION)                                                               !, YCOORD !;)))])(\YPOSITION.HPGL  [LAMBDA (STREAM YPOSITION)                             (* ; "Edited  8-Sep-87 08:31 by cdl")    (with PLOTTERDATA (with STREAM STREAM IMAGEDATA)           (with POSITION PD.POSITION (PROG1 YCOORD                                              (if YPOSITION                                                  then (\DUMPSTRING.HPGL STREAM)                                                        (printout PD.STREAM "PU" XCOORD !,                                                               (SETQ YCOORD YPOSITION)                                                               !;)))]))(* * Internal Functions)(DEFINEQ(\DUMPSTRING.HPGL  [LAMBDA (STREAM)                                       (* ; "Edited  8-Sep-87 08:51 by cdl")    (with PLOTTERDATA (with STREAM STREAM IMAGEDATA)           (if PD.TEXT               then (printout PD.STREAM "LB")                     (for CHARCODE in (DREVERSE PD.TEXT) do (BOUT PD.STREAM CHARCODE))                     (printout PD.STREAM !!;)                     (SETQ PD.TEXT NIL)                     T])(\FONTCREATE.HPGL  [LAMBDA (FAMILY SIZE FACE ROTATION)                    (* ; "Edited  4-Sep-87 15:13 by cdl")    (if (ASSOC FAMILY HPGL.FONTS)        then (LET ((WIDTHSBLOCK (\CREATECSINFOELEMENT))                       (FONTDESCRIPTOR (create FONTDESCRIPTOR                                              FONTDEVICE _ 'HPGL                                              FONTFAMILY _ FAMILY                                              FONTSIZE _ SIZE                                              FONTFACE _ FACE                                              ROTATION _ ROTATION                                              \SFHeight _ SIZE                                              \SFAscent _ SIZE                                              \SFDescent _ 0)))                      (bind (WIDTH _ (FIX (QUOTIENT (TIMES 3 SIZE)                                                     4))) for N from 0 to 254                         do (\FSETWIDTH WIDTHSBLOCK N WIDTH))                      (with FONTDESCRIPTOR FONTDESCRIPTOR                             (\SETCHARSETINFO FONTCHARSETVECTOR 0                                    (create CHARSETINFO                                           WIDTHS _ WIDTHSBLOCK                                           IMAGEWIDTHS _ WIDTHSBLOCK                                           CHARSETASCENT _ SIZE                                           CHARSETDESCENT _ 0)))                      FONTDESCRIPTOR)      else (FONTCREATE (CAAR HPGL.FONTS)                      SIZE FACE ROTATION 'HPGL])(\INIT.HPGL  [LAMBDA NIL                                            (* ; "Edited 20-Jul-88 17:04 by cdl")                                                             (* DECLARATIONS%: (RECORD CLASS                                                           (FONTCLASSNAME PRETTYFONT# DISPLAYFD                                                            PRESSFD INTERPRESSFD . OTHERFDS)))    (DECLARE (GLOBALVARS FONTDEFS FONTNAME))    (SETQ \NULLFDEV (create FDEV                           CLOSEFILE _ (FUNCTION NILL)))    (SETQ \HPGLIMAGEOPS (create IMAGEOPS                               IMAGETYPE _ 'HPGL                               IMCLOSEFN _ (FUNCTION \CLOSEFN.HPGL)                               IMXPOSITION _ (FUNCTION \XPOSITION.HPGL)                               IMYPOSITION _ (FUNCTION \YPOSITION.HPGL)                               IMFONT _ (FUNCTION \FONT.HPGL)                               IMLEFTMARGIN _ (FUNCTION \LEFTMARGIN.HPGL)                               IMRIGHTMARGIN _ (FUNCTION \RIGHTMARGIN.HPGL)                               IMLINEFEED _ (FUNCTION \LINEFEED.HPGL)                               IMDRAWLINE _ (FUNCTION \DRAWLINE.HPGL)                               IMDRAWCURVE _ (FUNCTION \DRAWCURVE.HPGL)                               IMDRAWCIRCLE _ (FUNCTION \DRAWCIRCLE.HPGL)                               IMDRAWELLIPSE _ (FUNCTION DRAWELLIPSEWITHDRAWCURVE)                               IMFILLCIRCLE _ (FUNCTION \FILLCIRCLE.HPGL)                               IMBITBLT _ (FUNCTION \BITBLT.HPGL)                               IMBLTSHADE _ (FUNCTION \BLTSHADE.HPGL)                               IMMOVETO _ (FUNCTION \MOVETO.HPGL)                               IMSCALE _ [FUNCTION (LAMBDA (STREAM SCALE)                                                     1]                               IMTERPRI _ (FUNCTION \TERPRI.HPGL)                               IMFONTCREATE _ 'HPGL                               IMCOLOR _ (FUNCTION \COLOR.HPGL)                               IMSTRINGWIDTH _ (FUNCTION \STRINGWIDTH.HPGL)                               IMCHARWIDTH _ (FUNCTION \STRINGWIDTH.HPGL)                               IMRESET _ (FUNCTION \RESET.HPGL)                               IMCLIPPINGREGION _ (FUNCTION \CLIPPINGREGION.HPGL)                               IMDRAWPOLYGON _ (FUNCTION \DRAWPOLYGON.HPGL)                               IMSCALEDBITBLT _ (FUNCTION \SCALEDBITBLT.HPGL)                               IMDRAWARC _ (FUNCTION \DRAWARC.HPGL)                               IMROTATE _ (FUNCTION \ROTATE.HPGL)))    (for FONTSET in FONTDEFS       do [for CLASS in (CDR (ASSOC 'FONTPROFILE (CDR FONTSET)))                 unless (with CLASS CLASS (OR (NULL DISPLAYFD)                                                      (NULL INTERPRESSFD)                                                      (ASSOC 'HPGL OTHERFDS)))                 do (with CLASS CLASS (push                                               OTHERFDS                                               (LIST 'HPGL (CONS 'STANDARD                                                                 (CDR (if (LISTP DISPLAYFD)                                                                          then DISPLAYFD                                                                        else (FONTUNPARSE                                                                                         DISPLAYFD]       finally (FONTSET FONTNAME])(\OUTCHAR.HPGL  [LAMBDA (STREAM CHARCODE)                              (* cdl " 3-Oct-85 13:20")    (with PLOTTERDATA (with STREAM STREAM IMAGEDATA)           (SELCHARQ CHARCODE                (EOL (\TERPRI.HPGL STREAM))                (if (AND (GEQ CHARCODE (CHARCODE SPACE))                             (LEQ CHARCODE (CHARCODE ~)))                    then (with POSITION PD.POSITION (add XCOORD (CHARWIDTH CHARCODE                                                                                    PD.FONT)))                          (push PD.TEXT CHARCODE])(\SEARCH.HPGL.FONTS  [LAMBDA (FAMILY SIZE FACE ROTATION DEVICE)             (* cdl " 1-May-85 09:34")    (if (EQ DEVICE 'HPGL)        then (if (FASSOC FAMILY HPGL.FONTS)                     then (LIST (LIST FAMILY SIZE FACE ROTATION DEVICE])(\FILL.HPGL  [LAMBDA (STREAM TEXTURE)                               (* ; "Edited  8-Dec-87 16:56 by cdl")                                                             (* DECLARATIONS%: (RECORD TEXTURE                                                           (TYPE SPACING ANGLE))                                                           (RECORD TEXTURECOLORPAIR                                                           (TEXURE COLOR)))    (\DUMPSTRING.HPGL STREAM)    (if (LISTP TEXTURE)        then (SETQ TEXTURE (with TEXTURECOLORPAIR TEXTURE (if (RGBP COLOR)                                                                      then (IMAGEOP 'IMCOLOR                                                                                       STREAM STREAM                                                                                       COLOR))                                      TEXTURE)))    [if (FIXP TEXTURE)        then (SETQ TEXTURE (create TEXTURE                                      TYPE _ (if (IEQP TEXTURE BLACKSHADE)                                                 then 1                                               elseif (IEQP TEXTURE WHITESHADE)                                                 then 3                                               else 4)                                      SPACING _ 0                                      ANGLE _ (TIMES (LOGAND TEXTURE 3)                                                     45]    (with PLOTTERDATA (with STREAM STREAM IMAGEDATA)           (with TEXTURE TEXTURE (printout PD.STREAM "FT" (if (AND (FIXP TYPE)                                                                           (GEQ TYPE 1)                                                                           (LEQ TYPE 4))                                                                  then TYPE                                                                else 1)                                            !,                                            (if (FIXP SPACING)                                                then SPACING                                              else 0)                                            !,                                            (if (AND (FIXP ANGLE)                                                         (ZEROP (IMOD ANGLE 45)))                                                then ANGLE                                              else 0)                                            !;)))    T])(\DASHING.HPGL  [LAMBDA (STREAM DASHING)                               (* ; "Edited 14-Sep-87 11:28 by cdl")                                                             (* DECLARATIONS%: (RECORD ENTRY                                                           (INDEX . LENGTHS)))    (with PLOTTERDATA (with STREAM STREAM IMAGEDATA)           (PROG1 (if PD.DASHING                      then (CDR (ASSOC PD.DASHING HPGL.DASHING)))               (if DASHING                   then (LET (INDEX)                                 [if (SETQ DASHING (MKLIST DASHING))                                     then (SETQ INDEX (for ENTRY in HPGL.DASHING                                                             thereis (with ENTRY ENTRY                                                                                (EQUAL DASHING                                                                                        LENGTHS))                                                             yield (with ENTRY ENTRY INDEX]                                 (if (AND (FIXP INDEX)                                              (NEQ INDEX PD.DASHING))                                     then (\DUMPSTRING.HPGL STREAM)                                           (printout PD.STREAM "LT" (SETQ PD.DASHING INDEX))                                           (if HPGL.PATTERN.LENGTH                                               then (printout PD.STREAM !, HPGL.PATTERN.LENGTH))                                           (printout PD.STREAM !;)))                 elseif PD.DASHING                   then (\DUMPSTRING.HPGL STREAM)                         (printout PD.STREAM "LT" !;)                         (SETQ PD.DASHING NIL)))]))(* * etc.)(RPAQQ HPGL.FONTS ((STANDARD . 0)                       (9825 . 1)                       (FRENCH . 2)                       (SCANDINAVIAN . 3)                       (SPANISH . 4)                       (JISASCII . 6)                       (ROMAN . 7)                       (KATAKANA . 8)                       (IRV . 9)                       (SWEDISH . 30)                       (SWEDISH2 . 31)                       (NORWAY . 32)                       (GERMAN . 33)                       (FRENCH2 . 34)                       (BRITISH . 35)                       (ITALIAN . 36)                       (SPANISH2 . 37)                       (PORTUGUESE . 38)                       (NORWAY2 . 39)))(RPAQQ HPGL.OPTIONS ((ROTATE . "RO")                         (VELOCITY . "VS")                         (PAPER . "PS")                         (TERMINATOR . "DT")))(RPAQQ HPGL.FONT.EXPANSIONS ((REGULAR . 200.0)                                 (COMPRESSED . 100.0)                                 (EXPANDED . 400.0)))(RPAQQ HPGL.DASHING ((1 1 49)                         (2 25)                         (3 35 15)                         (4 39 5 1 5)                         (5 35 5 5 5)                         (6 25 5 5 5 5 5)))(RPAQQ SKETCHINCOLORFLG T)(RPAQ? HPGL.TERMINATOR (CHARACTER (CHARCODE ;)))(RPAQ? HPGL.SEPARATOR (CHARACTER (CHARCODE %,)))(RPAQ? HPGL.TEXT.TERMINATOR (CHARACTER (CHARCODE ^A)))(RPAQ? HPGL.CHORD.ANGLE NIL)(RPAQ? HPGL.PATTERN.LENGTH NIL)(RPAQ? \HPGLIMAGEOPS NIL)(RPAQ? \NULLFDEV NIL)(RPAQ? SK.DASHING.PATTERNS NIL)(DECLARE%: DOEVAL@COMPILE DONTCOPY(GLOBALVARS HPGL.FONTS HPGL.OPTIONS HPGL.FONT.EXPANSIONS HPGL.DASHING HPGL.TERMINATOR HPGL.SEPARATOR       HPGL.TEXT.TERMINATOR HPGL.CHORD.ANGLE HPGL.PATTERN.LENGTH \HPGLIMAGEOPS \NULLFDEV))(DECLARE%: DOEVAL@COMPILE DONTCOPY (FILESLOAD UTILISOPRS)(ADDTOVAR PRINTOUTMACROS [!, (LAMBDA (COMS)                                        (CONS '(PRIN1 HPGL.SEPARATOR NIL)                                              (CDR COMS]                             [!; (LAMBDA (COMS)                                        (CONS '(PRIN1 HPGL.TERMINATOR NIL)                                              (CDR COMS]                             [!!; (LAMBDA (COMS)                                         (CONS '(PRIN1 HPGL.TEXT.TERMINATOR NIL)                                               (CDR COMS])(DECLARE%: EVAL@COMPILE(RECORD PLOTTERDATA (PD.STREAM PD.POSITION PD.FONT PD.TEXT PD.COLOR PD.SCALE PD.LEFTMARGIN                                PD.RIGHTMARGIN PD.DASHING PD.ROTATION)                        PD.POSITION _ (create POSITION)                        PD.COLOR _ 0 PD.LEFTMARGIN _ 0 PD.ROTATION _ 0)))(ADDTOVAR PRINTERTYPES ((PLOTTER HPGL)                            (CANPRINT (HPGL))                            (STATUS TRUE)                            (BITMAPFILE (HARDCOPYW.HPGL FILE BITMAP SCALEFACTOR REGION ROTATION TITLE                                               ))                            (PROPERTIES NILL)))(ADDTOVAR PRINTFILETYPES [HPGL (EXTENSION (HPGL PLOT))                                   (CONVERSION (TEXT MAKEHPGL TEDIT                                                     (LAMBDA (FILE PFILE)                                                            (SETQ FILE (OPENTEXTSTREAM FILE))                                                            (TEDIT.FORMAT.HARDCOPY FILE PFILE T NIL                                                                    NIL NIL 'HPGL)                                                            (CLOSEF? FILE)                                                            PFILE])(ADDTOVAR IMAGESTREAMTYPES (HPGL (OPENSTREAM OPENHPGLSTREAM)                                     (FONTCREATE \FONTCREATE.HPGL)                                     (FONTSAVAILABLE \SEARCH.HPGL.FONTS)                                     (CREATECHARSET NILL)))[if (FGETD (FUNCTION SK.DASHING.LABEL))    then (for ENTRY in HPGL.DASHING do (push SK.DASHING.PATTERNS                                                              (LIST (SK.DASHING.LABEL (CDR ENTRY))                                                                    (CDR ENTRY](\INIT.HPGL)(PUTPROPS HPGL COPYRIGHT ("Stanford University" 1985 1986 1987 1988))(DECLARE%: DONTCOPY  (FILEMAP (NIL (3583 6000 (MAKEHPGL 3593 . 3756) (OPENHPGLSTREAM 3758 . 5715) (HARDCOPYW.HPGL 5717 . 5998)) (6031 29802 (\BITBLT.HPGL 6041 . 8018) (\BLTSHADE.HPGL 8020 . 9173) (\CLOSEFN.HPGL 9175 . 9503) (\COLOR.HPGL 9505 . 11429) (\DRAWARC.HPGL 11431 . 12940) (\DRAWCIRCLE.HPGL 12942 . 14285) (\DRAWCURVE.HPGL 14287 . 15076) (\DRAWLINE.HPGL 15078 . 17236) (\DRAWPOLYGON.HPGL 17238 . 18904) (\FILLCIRCLE.HPGL 18906 . 19622) (\FONT.HPGL 19624 . 23275) (\LEFTMARGIN.HPGL 23277 . 23578) (\LINEFEED.HPGL 23580 . 23823) (\MOVETO.HPGL 23825 . 24303) (\RESET.HPGL 24305 . 24674) (\RIGHTMARGIN.HPGL 24676 . 24980) (\ROTATE.HPGL 24982 . 25356) (\SCALEDBITBLT.HPGL 25358 . 27641) (\STRINGWIDTH.HPGL 27643 . 27826) (\CLIPPINGREGION.HPGL 27828 . 28133) (\TERPRI.HPGL 28135 . 28492) (\XPOSITION.HPGL 28494 . 29156) (\YPOSITION.HPGL 29158 . 29800)) (29834 40881 (\DUMPSTRING.HPGL 29844 . 30316) (\FONTCREATE.HPGL 30318 . 31926) (\INIT.HPGL 31928 . 35493) (\OUTCHAR.HPGL 35495 . 36108) (\SEARCH.HPGL.FONTS 36110 . 36383) (\FILL.HPGL 36385 . 39041) (\DASHING.HPGL 39043 . 40879)))))STOP