(FILECREATED "24-Apr-87 19:08:21" {ERIS}<LISPUSERS>KOTO>HGRAPH.;2 12562 changes to: (FNS HARDCOPYWHOLEGRAPH) previous date: "27-Jan-87 14:35:21" {PHYLUM}<LISPUSERS>KOTO>HGRAPH.;1) (* Copyright (c) 1987 by Xerox Corporation. All rights reserved.) (PRETTYCOMPRINT HGRAPHCOMS) (RPAQQ HGRAPHCOMS ((FNS CEILING HARDCOPYDISPLAYGRAPH HARDCOPYWHOLEGRAPH) (P (MOVD (QUOTE HARDCOPYGRAPH) (QUOTE OLDHARDCOPYGRAPH)) (MOVD (QUOTE HARDCOPYWHOLEGRAPH) (QUOTE HARDCOPYGRAPH))) (* This is in order to fix the problem with borders on Interpress printers. I\t seems that you cannot bitblt anything thinner than 36 pixel onto an Interpress stream, why? Anyway, this fixes the problem by setting the border width to 36))) (DEFINEQ (CEILING [LAMBDA (NUMBER) (COND ((EQP (FIX NUMBER) NUMBER) NUMBER) (T (ADD1 (FIX NUMBER]) (HARDCOPYDISPLAYGRAPH [LAMBDA (GRAPH STREAM CLIP/REG TRANS) (* bbb "27-Jan-87 11:52") (* Displays GRAPH with coordinates system translated to TRANS on STREAM. POS=NIL is interpreted as 0\,0. Draws links first then labels so that lattices don't have lines through the labels.) (* This function is to be used together with HARDCOPYWHOLEGRAPH\, it assumes that the scaling of the graph is done already, for efficiency.) (PROG (SCALE (LINEWIDTH 1)) [OR (type? POSITION TRANS) (SETQ TRANS (CONSTANT (create POSITION XCOORD ← 0 YCOORD ← 0] (SETQ STREAM (GETSTREAM STREAM (QUOTE OUTPUT))) (COND ((DISPLAYSTREAMP STREAM) (* This is because PRIN3 on displaystreams can sometimes cause CR's to be output. GRAPHER/CENTERPRINTINAREA doesn't have the rightmargin kludge that the CENTERPRINTINAREA in MENU has.) (DSPRIGHTMARGIN 65000 STREAM)) (T (SETQ SCALE (DSPSCALE NIL STREAM)) [SETQ TRANS (create POSITION XCOORD ← (FIXR (FTIMES SCALE (fetch XCOORD of TRANS))) YCOORD ← (FIXR (FTIMES SCALE (fetch YCOORD of TRANS] (SETQ LINEWIDTH SCALE))) (for N in (fetch (GRAPH GRAPHNODES) of GRAPH) do (DISPLAYNODELINKS N TRANS STREAM GRAPH T LINEWIDTH)) (for N in (fetch (GRAPH GRAPHNODES) of GRAPH) do (PRINTDISPLAYNODE N TRANS STREAM CLIP/REG]) (HARDCOPYWHOLEGRAPH [LAMBDA (GraphOrWindow File ImageType Translation NoAlignmentDots DontCloseStream) (* N.H.Briggs "24-Apr-87 19:07") (* * Hardcopy \a whole graph from \a window using as many pages as necessary) (* fix: moved SCALE/GRAPH outside the for loops for effiency.) (* fix: moved SCALE.REGION inline, in order to avoid the LOADFNS in the COMS list.) (LET ((Stream (OR (AND File (OPENP File (QUOTE OUTPUT)) File) (OPENIMAGESTREAM File ImageType))) (Graph (COND ((WINDOWP GraphOrWindow) (WINDOWPROP GraphOrWindow (QUOTE GRAPH))) (T GraphOrWindow))) GraphUnitsPerPageUnit PageUnitsPerGraphUnit GraphRegionInGraphUnits GraphRegionInPageUnits PageRegion PageWidthInGraphUnits PageHeightInGraphUnits GraphWidthInGraphUnits GraphHeightInGraphUnits CornerXOffsetInGraphUnits CornerYOffsetInGraphUnits PageScale LeftCenteringOffsetInGraphUnits BottomCenteringOffsetInGraphUnits PageNumberFont NumberOfXPages NumberOfYPages XPageNumberPositionInPageUnits YPageNumberPositionInPageUnits LeftXAlignmentInPageUnits RightXAlignmentInPageUnits LowerYAlignmentInPageUnits UpperYAlignmentInPageUnits PageUnitsPerInch) (SETQ PageScale (DSPSCALE NIL Stream)) (SETQ GraphUnitsPerPageUnit (FQUOTIENT 1.0 PageScale)) (SETQ PageUnitsPerGraphUnit PageScale) (* 72 screen points per inch.) (SETQ PageUnitsPerInch (TIMES PageScale 72)) (SETQ GraphRegionInGraphUnits (GRAPHREGION Graph)) (SETQ CornerXOffsetInGraphUnits (MINUS (fetch (REGION LEFT) of GraphRegionInGraphUnits))) (SETQ CornerYOffsetInGraphUnits (MINUS (fetch (REGION BOTTOM) of GraphRegionInGraphUnits))) (* fix: moved SCALE.REGION inline, in order to avoid the LOADFNS in the COMS list.) [SETQ GraphRegionInPageUnits (CREATEREGION (FIXR (QUOTIENT (fetch (REGION LEFT) of GraphRegionInGraphUnits) GraphUnitsPerPageUnit)) (FIXR (QUOTIENT (fetch (REGION BOTTOM) of GraphRegionInGraphUnits) GraphUnitsPerPageUnit)) (FIXR (QUOTIENT (fetch (REGION WIDTH) of GraphRegionInGraphUnits) GraphUnitsPerPageUnit)) (FIXR (QUOTIENT (fetch (REGION HEIGHT) of GraphRegionInGraphUnits) GraphUnitsPerPageUnit] (SELECTQ (IMAGESTREAMTYPE Stream) [INTERPRESS (* * Make the clipping region be the whole page on Interpress streams) (DSPCLIPPINGREGION (CREATEREGION 0 0 (FIXR (TIMES PageUnitsPerInch 8.5) ) (FIXR (TIMES PageUnitsPerInch 11.0))) Stream) (* * Get rid of 1 inch margins except .5 inch at right and top) (SETQ PageRegion (CREATEREGION 0 0 (FIXR (TIMES PageUnitsPerInch 8.0) ) (FIXR (TIMES PageUnitsPerInch 10.5] [PRESS (* * Make the clipping region be the whole page on Press streams) (DSPCLIPPINGREGION (CREATEREGION 0 0 (FIXR (TIMES PageUnitsPerInch 8.5)) (FIXR (TIMES PageUnitsPerInch 11.0))) Stream) (* * Get rid of 1 inch margins except 1 inch at right and top) (SETQ PageRegion (CREATEREGION 0 0 (FIXR (TIMES PageUnitsPerInch 7.5)) (FIXR (TIMES PageUnitsPerInch 10.0] (SETQ PageRegion (DSPCLIPPINGREGION NIL Stream))) (SETQ PageWidthInGraphUnits (TIMES (fetch (REGION WIDTH) of PageRegion) GraphUnitsPerPageUnit)) (SETQ PageHeightInGraphUnits (TIMES (fetch (REGION HEIGHT) of PageRegion) GraphUnitsPerPageUnit)) (SETQ GraphWidthInGraphUnits (fetch (REGION WIDTH) of GraphRegionInGraphUnits)) (SETQ GraphHeightInGraphUnits (fetch (REGION HEIGHT) of GraphRegionInGraphUnits)) (SETQ BottomCenteringOffsetInGraphUnits (QUOTIENT (DIFFERENCE PageHeightInGraphUnits (REMAINDER GraphHeightInGraphUnits PageHeightInGraphUnits)) 1.75)) (SETQ LeftCenteringOffsetInGraphUnits (QUOTIENT (DIFFERENCE PageWidthInGraphUnits (REMAINDER GraphWidthInGraphUnits PageWidthInGraphUnits)) 1.75)) (SETQ NumberOfYPages (CEILING (QUOTIENT GraphHeightInGraphUnits PageHeightInGraphUnits) )) (SETQ NumberOfXPages (CEILING (QUOTIENT GraphWidthInGraphUnits PageWidthInGraphUnits))) (SETQ PageNumberFont (FONTCREATE (QUOTE MODERN) 6)) (* * The page numbers are \a quarter of in after the edge of the printing edge and are in the upper right hand corner of the page. The pages are printed row-wise and no page numbers are printed on the last page. The page numbers are positioned .25 inch to the right of the right edge of the page region and .35 inch up from the top of the page region. The alignment dots are .25 inch to the right of the right edge of the page region and .25 inch up from the page region.) (SETQ XPageNumberPositionInPageUnits (PLUS (fetch (REGION RIGHT) of PageRegion) (TIMES PageUnitsPerInch .25))) (SETQ YPageNumberPositionInPageUnits (PLUS (fetch (REGION TOP) of PageRegion) (TIMES PageUnitsPerInch .35))) (SETQ LeftXAlignmentInPageUnits (TIMES PageUnitsPerInch .25)) (SETQ RightXAlignmentInPageUnits (PLUS (fetch (REGION RIGHT) of PageRegion) (TIMES PageUnitsPerInch .25))) (SETQ LowerYAlignmentInPageUnits (TIMES PageUnitsPerInch .25)) (SETQ UpperYAlignmentInPageUnits (PLUS (fetch (REGION TOP) of PageRegion) (TIMES PageUnitsPerInch .25))) (* Latest fix: moved SCALE/GRAPH outside the for loops for effiency.) (SETQ Graph (SCALE/GRAPH Graph Stream PageScale)) [for BottomOfPageInGraphUnits from 0 to GraphHeightInGraphUnits by PageHeightInGraphUnits as YPageNumber from 1 do (for LeftOfPageInGraphUnits from 0 to GraphWidthInGraphUnits by PageWidthInGraphUnits as XPageNumber from 1 do [HARDCOPYDISPLAYGRAPH Graph Stream (DSPCLIPPINGREGION NIL Stream) (create POSITION XCOORD ← (FIXR (PLUS CornerXOffsetInGraphUnits LeftCenteringOffsetInGraphUnits (MINUS LeftOfPageInGraphUnits))) YCOORD ← (FIXR (PLUS BottomCenteringOffsetInGraphUnits CornerYOffsetInGraphUnits (MINUS BottomOfPageInGraphUnits] (* * Print the alignment points) [COND ((NOT NoAlignmentDots) (* * The lower left page should not have \a dot in the lower left corner. Similarly for other corner pages.) (COND ((NOT (AND (EQ XPageNumber 1) (EQ YPageNumber 1))) (MOVETO LeftXAlignmentInPageUnits LowerYAlignmentInPageUnits Stream) (printout Stream "."))) (COND ((NOT (AND (EQ XPageNumber NumberOfXPages) (EQ YPageNumber 1))) (MOVETO RightXAlignmentInPageUnits LowerYAlignmentInPageUnits Stream) (printout Stream "."))) (COND ((NOT (AND (EQ YPageNumber NumberOfYPages) (EQ XPageNumber 1))) (MOVETO LeftXAlignmentInPageUnits UpperYAlignmentInPageUnits Stream) (printout Stream "."))) (COND ((NOT (AND (EQ XPageNumber NumberOfXPages) (EQ YPageNumber NumberOfYPages))) (MOVETO RightXAlignmentInPageUnits UpperYAlignmentInPageUnits Stream) (printout Stream "."] (COND ((NOT (AND (EQ XPageNumber NumberOfXPages) (EQ YPageNumber NumberOfYPages))) (* Not on the very last page) (DSPFONT PageNumberFont Stream) (MOVETO XPageNumberPositionInPageUnits YPageNumberPositionInPageUnits Stream) (printout Stream XPageNumber "," YPageNumber) (* Print the page number) (DSPNEWPAGE Stream] (COND ((NOT DontCloseStream) (CLOSEF Stream]) ) (MOVD (QUOTE HARDCOPYGRAPH) (QUOTE OLDHARDCOPYGRAPH)) (MOVD (QUOTE HARDCOPYWHOLEGRAPH) (QUOTE HARDCOPYGRAPH)) (* This is in order to fix the problem with borders on Interpress printers. I\t seems that you cannot bitblt anything thinner than 36 pixel onto an Interpress stream, why? Anyway, this fixes the problem by setting the border width to 36) (PUTPROPS HGRAPH COPYRIGHT ("Xerox Corporation" 1987)) (DECLARE: DONTCOPY (FILEMAP (NIL (779 12115 (CEILING 789 . 928) (HARDCOPYDISPLAYGRAPH 930 . 2653) (HARDCOPYWHOLEGRAPH 2655 . 12113))))) STOP