[comp.windows.news] Yin/Yang root image---with a twist

spe@spice.cs.cmu.edu (Sean Engelson) (07/13/88)

% This program changes the root image to a Yin/Yang symbol on a purplish
% background.  It also, if you want, will set the symbol to spin
% around its centre.  Quite pretty.

% Created by Sean P. Engelson
% Spinning thought of by John Kolojejchick

systemdict begin

% Draw a yin/yang (just some arcs and fills)
/yinyang {  % angle x y  => __
    translate
    40 40 scale
    10 10 translate rotate -10 -10 translate
    1 setgray
    newpath
    10 10 10 0 180 arcn
    5 10 5 180 0 arc
    15 10 5 180 0 arcn
    fill
    0 setgray
    newpath
    10 10 10 0 180 arc % big arc black side
    5 10 5 180 0 arc % black bulge
    15 10 5 180 0 arcn % white bulge
    fill
    gsave
      4 10 moveto
      newpath
      5 10 1 0 360 arc
      1 setgray fill
    grestore
    newpath
    10 10 10 0 360 arc
    stroke
    newpath
    14 10 moveto
    newpath
    15 10 1 0 360 arc
    0 setgray fill
} def

% angle to draw it at
/YinYangAng 0 def

% Draw it on the root
/RootYinYang {
  gsave
  framebuffer setcanvas
  0 0 1200 1200 rectpath
  .5 .5 1 setrgbcolor fill
  YinYangAng 160 60 yinyang
  grestore
} def

/PaintRoot /RootYinYang load store PaintRoot

end

% Set the yin/yang to spin by queuing events.
/TimeYinYang {
  {
    /d 2 dict dup begin
      /RotateYinYang {
	/YinYangAng YinYangAng 5 add store % change the 5 to adjust
					   % the speed
	gsave
	framebuffer setcanvas
	YinYangAng 160 60 yinyang
	grestore
        SendNewYinYangEvent
      } def
    end def
    /e1 createevent def
    e1 /Name d put
    e1 expressinterest
    /SendNewYinYangEvent {
	e1 createevent copy dup begin
	/Name /RotateYinYang def
	/TimeStamp currenttime .05 add def
      end
      sendevent
    } def
    SendNewYinYangEvent
    { awaitevent } loop
  } fork
} def

% If you don't want it to spin, comment this next line:
TimeYinYang