[comp.fonts] Here is a PostScript font for flow diagrams

day@grand.UUCP (Dave Yost) (11/06/88)

When comp.fonts was formed, I hoped to see PostScript
fonts posted here.  But nooo, until now, not a one.
In hopes of starting the flow, as it were, I hereby
post a font I whipped up for drawing flow diagrams.
It draws arrows and rounded-corner pipe fittings for
use with Courier text (each element is the same width
as a Courier character).  I used it to document the
flow of the spelling checker menus in the Grand Editor.

I am cross-posting to comp.lang.postscript as a reminder
to that group that the fonts group is here, and as an
request for more posting of fonts here.

It's not a nice, clean, fully-fleshed-out font, but it
works.  If someone would like to take it and finish it,
great.  A more complete set of fittings including
square cornered ones would be fitting, as would all the
normal font parameters that are supposed to be there.
If you send the following PostScript file to your
printer, you'll see what it does.

 --dave yost

%!
%%Creator: Dave Yost
%%Title: Download font: flow
%%CreationDate: 880129
%%Pages: 0
% November 5, 1988 Dave Yost, Grand Software, Inc.
% 213-650-1089 {uunet,attmail}!grand!dyost or dyost@grand.COM
% Permission granted to all to copy, enhance, and use.
%%EndComments
% FontDirectory /flow known{(flow in place--not loaded\n)print flush stop}
% {0 serverdict begin exitserver}ifelse
% - or -
% 0 serverdict begin exitserver

/F_flow 17 dict def
F_flow begin
    /FontType 3 def
    /FontMatrix [.001000  0 0 .001000  0 0] def
    /FontBBox [-100 -400 700 1100 ] def
    /Encoding 256 array def
    0 1 256 1 sub {Encoding exch /.notdef put} for

    /CharProcs 256 1 add dict def
    CharProcs begin
	%/PreserveWidth 32 def % Put entire width adjust into space char
	/.notdef {} def
	/.notdef {600 0 setcharwidth {}} def

	% 65 A curve up    left
	Encoding 65 /A put      /A { 300 -200 moveto    0   200 rlineto stroke newpath    0    0 300   0  90 arc                 stroke} def
	% 66 B curve down  left
	Encoding 66 /B put      /B { 300  800 moveto    0  -200 rlineto stroke newpath    0  600 300   0 270 arcn                stroke} def
	% 67 C curve up    right
	Encoding 67 /C put      /C { 300 -200 moveto    0   200 rlineto stroke newpath  600    0 300 180  90 arcn                stroke} def
	% 68 D curve down  right
	Encoding 68 /D put      /D { 300  800 moveto    0  -200 rlineto stroke newpath  600  600 300 180 270 arc                 stroke} def

	% 69 E horiz left  up
	Encoding 69 /E put      /E {   0  300 moveto  600     0 rlineto stroke newpath  600  600 300 270 180 arcn 0  200 rlineto stroke} def
	% 70 F horiz left  down
	Encoding 70 /F put      /F {   0  300 moveto  600     0 rlineto stroke newpath  600    0 300  90 180 arc  0 -200 rlineto stroke} def
	% 71 G horiz right up
	Encoding 71 /G put      /G { 600  300 moveto -600     0 rlineto stroke newpath    0  600 300 270   0 arc  0  200 rlineto stroke} def
	% 72 H horiz right down
	Encoding 72 /H put      /H { 600  300 moveto -600     0 rlineto stroke newpath    0    0 300  90   0 arcn 0 -200 rlineto stroke} def

	% 73 I vert  up    left
	Encoding 73 /I put      /I { 300  800 moveto    0 -1000 rlineto stroke newpath    0    0 300   0  90 arc                 stroke} def
	% 74 J vert  up    right
	Encoding 74 /J put      /J { 300  800 moveto    0 -1000 rlineto stroke newpath  600    0 300 180  90 arcn                stroke} def
	% 75 K vert  down  left
	Encoding 75 /K put      /K { 300 -200 moveto    0  1000 rlineto stroke newpath    0  600 300   0 270 arcn                stroke} def
	% 76 L vert  down  right
	Encoding 76 /L put      /L { 300 -200 moveto    0  1000 rlineto stroke newpath  600  600 300 180 270 arc                 stroke} def

	% 77 M horiz
	Encoding 77 /M put      /M {   0  300 moveto  600     0 rlineto stroke                                                         } def
	% 78 N vert
	Encoding 78 /N put      /N { 300 -200 moveto    0  1000 rlineto stroke                                                         } def
	% 79 O cross
	Encoding 79 /O put      /O {   0  300 moveto  600     0 rlineto stroke newpath  300 -200 moveto    0  1000 rlineto stroke} def
	% 80 P right arrow back
	Encoding 80 /P put      /P {                  600   300 moveto                  600 1000  700 270 230 arcn stroke 600 300 moveto newpath 600  -400  700  90 130 arc stroke} def
	% 81 Q right arrow front
	Encoding 81 /Q put      /Q {   0  300 moveto  600     0 rlineto stroke newpath  600 1000  700 270 230 arcn stroke 600 300 moveto newpath 600  -400  700  90 130 arc stroke} def
    end % CharProcs

    %% BuildChar is called by PS
    %% whenever a character is to be imaged out of Code39
    /BuildChar {
	600 0
	-300 -300 1100 1100
	    setcachedevice
	exch begin
	    Encoding exch get
	    CharProcs exch get
	end
	100 setlinewidth
	exec
    } def
end % Code39FontDict

/flow F_flow definefont pop

/DoDemo true def
DoDemo {
    /C { /Courier findfont 50 scalefont setfont show } def
    /F { /flow    findfont 50 scalefont setfont show } def

    72 725 moveto (flowfont.ps) C
    72 650 moveto (A) C (A) F (B) C (B) F (C) C (C) F (D) C (D) F
    72 600 moveto (E) C (E) F (F) C (F) F (G) C (G) F (H) C (H) F
    72 550 moveto (I) C (I) F (J) C (J) F (K) C (K) F (L) C (L) F
    72 500 moveto (M) C (M) F (N) C (N) F (O) C (O) F (P) C (P) F (Q) C (Q) F

    /flow findfont 50 scalefont setfont
    72 450 moveto (CFFHA) show
    72 400 moveto (JOOOI) show
    72 350 moveto (LOOOI) show
    72 300 moveto (LOOOK) show
    72 250 moveto (DEGGB) show
    /X {
	72 200 moveto (A) C (MMMMA) F
	72 150 moveto (B) C (MMA N) F
	72 100 moveto (C) C (MMI N) F
	72  50 moveto (D) C (MMEMEMMQ) F (E) C
    } def
    X
    400 170 translate .2 .2 scale
    X
    showpage

} if