🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: comp.lang.postscript
1 messages
1 total messages Started by Brian Reid Thu, 28 Jan 1988 23:56
PS examples: toy sales graphs
#6827
Author: Brian Reid
Date: Thu, 28 Jan 1988 23:56
97 lines
3776 bytes
Here's a file that prints a bunch of fake graphs of sales against time. I put
this together originally as part of an argument with somebody over whether
GKS or PostScript had a more compact representation. I took his GKS file and
recoded it (by hand, admittedly) in PostScript. Mine was about a factor of 8
smaller).

%!
% GKS example with some little PostScript-only games played.
% Brian Reid, 13 June 1985.
/vsc 10.0 def		% vertical scale is 0.1 (horiz is ok)
/llbl [(Jan)(Feb)(Mar)(Apr)(May)(Jun)(Jul)(Aug)(Sep)(Oct)(Nov)(Dec)]def
/stxt /Courier findfont .35 scalefont def
/ntxt /Helvetica findfont .30 scalefont def
/axlbl /Helvetica findfont .46 scalefont def
/ltxt /Times-Roman findfont .6 scalefont def
/GKD 50 dict def /xdf {exch def} def

/markx [1. 2. 3. 4. 5. 6. 7. 8. 9.]def
/marky [.37 .5 .32 .8 .6 .7 .6 .3 .5]def
/bars [.1 .4 .29 .2 .55 .6 .4 .2 .34]def
%---------------------

% (str) x y cshow
/cshow{GKD begin /ctry xdf /ctrx xdf /cstr xdf
       cstr stringwidth pop 2 div ctrx exch sub ctry moveto cstr show end}def

% draw a big dot at current position
/drawdot{gsave currentpoint newpath moveto currentpoint lineto
	lwid 2 mul setlinewidth stroke grestore}def

% xarray yarray /pointfunc linewidth polyline
/polyline{GKD begin gsave 1 setlinecap 1 setlinejoin
	/lwid xdf /ptfunc exch load def /my xdf /mx xdf
	newpath 0 1 my length 1 sub {/i xdf 
	mx i get my i get i 0 eq 
	{moveto}{lineto}ifelse ptfunc} for lwid setlinewidth stroke
	grestore end}def

% llx lly urx ury lwid filltype fbox 
/fbox{GKD begin /tfill xdf
   /lw2 xdf /ury xdf /urx xdf
   /lly exch lw2 add def /llx xdf
   newpath llx lly moveto llx ury lineto urx ury lineto urx lly lineto
   closepath gsave clip gsave tfill setgray fill grestore
   lw2 2 mul setlinewidth stroke
   grestore end
}def

%---------
/maxrand 2 31 exp 1 sub def
/onegraph {
    0 1 8 {/ix exch def marky ix
        rand maxrand div .7 mul dup /vval exch def put
	bars ix rand maxrand div .6 mul .7 add vval mul 
	   dup .8 gt {pop .8} if put
    } for
    gsave 30 30 scale 
    4 7 translate		
    -1.2 -1.2 10.5 10.5 0 0.975 fbox
    ltxt setfont		
    2.2 8.7 7.8 9.7 0 0 fbox 1 setgray
    (Sales of #00000) dup 10 rand maxrand div 89999 mul cvi 10000 add
    (     ) cvs putinterval
    5 9 cshow 0 setgray
    % draw axes 
    newpath 0 9.5 moveto 0 0 lineto 10 0 lineto .05 setlinewidth stroke
    % put Y axis tickmarks
    .025 setlinewidth stxt setfont
    gsave newpath 10{-.17 0 moveto 0 0 lineto 0 1 translate}repeat
	    stroke grestore
    % put X axis tickmarks
    1 1 9 {dup llbl exch 1 sub get exch -0.3 cshow} for
    
    % put X axis label
    axlbl setfont (Calendar Month) 5 -1 cshow
    % put Y axis label
    gsave 90 rotate (Units Sold (thousands)) 4.5 .7 cshow
    stxt setfont 0 1 9 {dup ( ) cvs exch 0.25 cshow}for
    grestore
    
    % draw the boxes
    0 1 8{/i xdf i .65 add 0 i 1.35 add bars i get
	 vsc mul .02 .76 fbox}for

    % draw the X's and connect them with a "polyline"
    markx [ marky {vsc mul}forall ] /drawdot .1 polyline
    
    % put a label along the graph
    gsave markx 0 get marky 0 get vsc mul translate
	  marky 1 get marky 0 get sub vsc mul markx 1 get markx 0 get sub
	  atan rotate .1 0.18 moveto ntxt setfont
	  (Predicted) show grestore
    grestore
    showpage
} def
10 {onegraph} repeat
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads