%!PS-Adobe-3.0
%%Page: 1 1
%%PageBoundingBox: 175 316 437 579
%%BoundingBox: 175 316 437 579

/strdimensions {
	gsave
	newpath
	0 0 moveto
    false charpath flattenpath pathbbox 
    exch 4 -1 roll sub
    3 1 roll exch sub
	grestore
} def

/die1_data [
%	[50 33 33 48 67 67 50]
%	[27 7 31 34 30 5 0]
	[50 33 33 48 67 67 50]
	[27 7 31 34 30 5 0]
	[
		[50 30 2 1 0]
		[54 21 1.2 2 0]
		[63 11 1.2 2 0]
		[46 21 1.2 2 0]
		[46 7 1.2 2 0]
	]
]def

/die2_data [
%	[15 0 0 19 40 40 15]
%	[25 9 31 33 27 2 0]
	[15 0 0 19 40 40 15]
	[25 7 31 33 27 0 -3]
	[
		[18 29 2 1 0]
		[28 12 2 2 0]
		[21 4 2 2 0]
		[21 19 2 2 0]
		[35 5 2 2 0]
		[35 20 2 2 0]
		[4 10 1.2 2 0]
		[11.5 20.5 1.4 2 0]
	]
] def

% cx cy rx ry ang mk_ellipse -
/mk_ellipse {
	/ang exch def
	/ry exch def
	/rx exch def
	/cy exch def
	/cx exch def

	gsave
		newpath
		cx cy translate
		ang rotate
		rx ry scale
		0 0 1 0 360 arc
		fill
	grestore
} def

/fill_die {
	1 setgray
	newpath
	xval 1 get yval 1 get moveto
	xval 2 get yval 2 get lineto
	xval 3 get yval 3 get lineto
	xval 4 get yval 4 get lineto
	xval 5 get yval 5 get lineto
	xval 6 get yval 6 get lineto
	closepath
	fill
} def

/outline_die {
	0 setgray
	newpath
	xval 1 get yval 1 get moveto
	xval 2 get yval 2 get lineto
	xval 3 get yval 3 get lineto
	xval 4 get yval 4 get lineto
	xval 5 get yval 5 get lineto
	xval 6 get yval 6 get lineto
	closepath
	xval 0 get yval 0 get moveto
	xval 2 get yval 2 get lineto
	xval 0 get yval 0 get moveto
	xval 4 get yval 4 get lineto
	xval 0 get yval 0 get moveto
	xval 6 get yval 6 get lineto
	stroke
} def

/do_spot {
	aload pop
	mk_ellipse
} def

/spot_die {
	spots { 
		do_spot
	} forall
	
} def

/do_die {
	dup 0 get /xval exch def
	dup 1 get /yval exch def
	2 get /spots exch def
	fill_die
	outline_die
	spot_die
} def

/dicedict 32 dict def

/do_dice {
	save
	mark
	-94 -45 translate
	2.8 2.8 scale
	dicedict begin
		die1_data do_die
		die2_data do_die
	end
	cleartomark
	restore
} def

/outsidecircletext
 { circtextdict begin
   /radius exch def
   /centerangle exch def
   /ptsize exch def
   /str exch def
   /xradius radius ptsize 4 div add def

   gsave
	 centerangle str findhalfangle add rotate

	 str
	   { /charcode exch def
		 (A) dup 0 charcode put outsideplacechar
	   } forall

   grestore
  end
} def


/insidecircletext
 { circtextdict begin
   /radius exch def
   /centerangle exch def
   /ptsize exch def
   /str exch def
   /xradius radius ptsize 4 div add def

   /radius radius charheight add def

   gsave
	 centerangle str findhalfangle sub rotate

	 str
	   { /charcode exch def
		 (A) dup 0 charcode put insideplacechar
	   } forall

   grestore
  end
} def

/circtextdict 16 dict def
circtextdict begin
  /findhalfangle
    { stringwidth pop 2 div
        2 xradius mul pi mul div 360 mul
    } def

  /outsideplacechar
    { /char exch def
      /halfangle char findhalfangle def
      gsave
        halfangle neg rotate
        radius 0 translate
        -90 rotate
        char stringwidth pop 2 div neg 0 moveto
        char show
      grestore
      halfangle 2 mul neg rotate
    } def

  /insideplacechar
    { /char exch def
      /halfangle char findhalfangle def
      gsave
        halfangle rotate
        radius 0 translate
        90 rotate
        char stringwidth pop 2 div neg 0 moveto
        char show
      grestore
      halfangle 2 mul rotate
    } def

  /charheight
	{
      newpath
      0 0 moveto 
      (A) true charpath flattenpath pathbbox 
      exch 4 -1 roll pop pop
      exch sub
	} def

  /pi 3.1415923 def
end

/makecircle {
	/crad exch def
	/cy exch def
	/cx exch def
	newpath
	cx cy crad 0 360 arc stroke
} def

/centertext {
	/str exch def

	str strdimensions
	2 div exch 2 div
	4 -1 roll exch sub
	3 1 roll sub
	moveto str show
} def

/ptSize 31 def
/Radius 108 def

/Helvetica-Bold findfont ptSize scalefont setfont

306 448 translate

% 0 0 Radius makecircle
% 0 0 1 makecircle

(REUSABLE CODE) ptSize 90 Radius outsidecircletext

(BETTER PROGRAMS NOW) ptSize 270 Radius insidecircletext

do_dice

/Helvetica-Bold findfont 70 scalefont setfont

gsave
1 setgray
2 -52 (C++) centertext
grestore
gsave
1 setgray
-2 -52 (C++) centertext
grestore
gsave
1 setgray
-2 -48 (C++) centertext
grestore
gsave
1 setgray
2 -48 (C++) centertext
grestore
0 setgray
0 -50 (C++) centertext

showpage