%! % procedures /pagebegin { /A exch def /x A 0 get def /y A 1 get def gsave 72 dup scale x y translate 0.5 72 div setlinewidth } def /pageend { grestore showpage } def % array [x y r theta]] /circle {8 dict begin /A exch def /x A 0 get def /y A 1 get def /r A 2 get def /theta A 3 get def /c 0 def /n 64 def newpath r c cos mul x add r c sin mul y add moveto n{ /c c theta n div add def r c cos mul x add r c sin mul y add lineto } repeat end} def % array [x y a b theta] /ellipse {9 dict begin /A exch def /x A 0 get def /y A 1 get def /a A 2 get def /b A 3 get def /theta A 4 get def /c 0 def /n 64 def newpath a c cos mul x add b c sin mul y add moveto n{ /c c theta n div add def a c cos mul x add b c sin mul y add lineto } repeat end} def % colors /black { 0 0 0 setrgbcolor }def /yellow { 1 1 0 setrgbcolor } def /red { 1 0 0 setrgbcolor } def /blue { 0 1 1 setrgbcolor } def /green { 0 1 0 setrgbcolor } def /white { 1 1 1 setrgbcolor } def % Fonts /largefont { /Times-Roman findfont 0.32 scalefont setfont } def /normalfont { /Times-Roman findfont 0.22 scalefont setfont } def /smallfont { /Times-Roman findfont 0.16 scalefont setfont}def % rotate [x y r theta] /rotate{ 6 dict begin /A exch def /x A 0 get def /y A 1 get def /r A 2 get def /theta A 3 get def /alpha -90 theta add def newpath x y moveto r alpha sin alpha cos div mul r lineto stroke }def /rotateA{ /A exch def /x A 0 get def /y A 1 get def /r A 2 get def /theta A 3 get def x y moveto r theta cos mul x add r theta sin mul y add lineto stroke }def /polygon { 2 dict begin /poly exch def /n poly length def poly 0 get aload pop moveto 1 1 n 1 sub { /i exch def poly i get aload pop lineto } for end} def /latitude {7 dict begin /lat exch def /n lat length def /a 0 def n{ /theta lat a get def /alpha -88 def /a a 1 add def newpath alpha sin alpha cos div 1 alpha cos div theta sin theta cos div mul moveto 176{ /alpha alpha 1 add def alpha sin alpha cos div 1 alpha cos div theta sin theta cos div mul lineto }repeat stroke }repeat end}def /longitude {7 dict begin /long exch def /n long length def /a 0 def n{ /theta long a get def /a a 1 add def newpath theta sin theta cos div -5.25 moveto theta sin theta cos div 5.25 lineto stroke }repeat end}def /arcA { 3 dict begin newpath r r mul a a mul sub sqrt x sub a y add moveto N{ /a a 0.001 add def r r mul a a mul sub sqrt x sub a y add lineto }repeat } def /arcB { 3 dict begin newpath r r mul a a mul sub sqrt neg x add a y add moveto N{ /a a 0.001 add def r r mul a a mul sub sqrt neg x add a y add lineto }repeat } def /arcsA{ /arcs exch def /n arcs length def /c 0 def n{ /theta arcs c get def /N 2000 def /a -1 def /b 0.4 def /r 1 theta sin div def /x theta cos theta sin div def /y 0 def arcA stroke /theta arcs c get def /N 2000 def /a -1 def /b 0.4 def /r 1 theta sin div def /x theta cos theta sin div def /y 0 def arcB stroke /c c 1 add def } repeat }def /arcsA{ /arcs exch def /n arcs length def /c 0 def n{ /theta arcs c get def /N 2000 def /a -1 def /b 0.4 def /r 1 theta sin div def /x theta cos theta sin div def /y 0 def arcA stroke /theta arcs c get def /N 2000 def /a -1 def /b 0.4 def /r 1 theta sin div def /x theta cos theta sin div def /y 0 def arcB stroke /c c 1 add def } repeat }def /arcsB { /arcs exch def /n arcs length def /c 0 def n{ /theta arcs c get def [0 1 theta sin div theta cos theta sin div -180] circle stroke [0 1 theta sin div neg theta cos theta sin div 180] circle stroke /c c 1 add def }repeat }def [4 5.25] pagebegin black [[-2 2] [2 2] [2 -2] [-2 -2]] polygon fill white [0 0 1 360] circle stroke white [30 60] arcsA newpath 0 1 moveto 0 -1 lineto stroke pageend