%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% File: clock.mf
% Date: April 10, 2001
% Author: Oliver Corff
% (c) 2001 Ulaanbaatar, Beijing, Berlin
%
% A metafont for providing the clock to LaTeX-users.
%
% Usage: see package clock
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% This font contains characters for hands and dials. %%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
mode_setup;
mg:=4/4;
thin#:=mg*1pt#;
width#:=mg*16pt#;
height#:=mg*12pt#;
depth#:=mg*4pt#;
margin#:=mg*1.05pt#;
define_pixels(width,height,depth,thin,margin);
font_size = 10pt#;
font_x_height = 16pt#;
% font_quad = 16pt#;
font_normal_space = 0pt#;
font_extra_space = 0pt#;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% All sorts of clock parts
%
def MinuteHand (expr minutes) = % Minutenzeiger
z1=(w/2,1/2(h-d));
z2=(w/2,27/36h-margin);
pickup pencircle scaled 1/2thin; % rotated (-minutes*6);
draw (z1--z2) rotatedabout (z1,-minutes*6);
enddef;
def HourHand (expr minutes) = % Stundenzeiger
z1=(w/2,1/2(h-d));
z2=(w/2,24/36h-margin);
pickup pencircle scaled 9/16thin; % rotated (-minutes*6);
draw (z1--z2) rotatedabout (z1,-minutes*6);
enddef;
def Hands (expr minutes) = % Beide Zeiger
%
beginchar(minutes+64,width#,height#,depth#);
MinuteHand(minutes);
endchar;
%
beginchar(minutes+128,width#,height#,depth#);
HourHand(minutes);
endchar;
enddef;
def NESW =
% This routine places ticks at 12, 3, 6 and 9 o'clock
for l = 0,3,6,9:
top z5=(w/2,h-margin);
z7=(w/2,1/2(h-d));
z6=6/36[z5,z7];
draw (z5--z6) rotatedabout (z7,-l*30);
endfor;
enddef;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% All sorts of dials
%
beginchar("0",width#,height#,depth#);
top z1=(0.5w,h-margin); % 12 Uhr
rt z2=(w-margin,0.5(h-d)); % 3 Uhr
bot z3=(x1,-d+margin); % 6 Uhr
lft z4=(0+margin,y2); % 9 Uhr
pickup pencircle scaled 1/2thin;
draw z1...z2...z3...z4...cycle;
endchar;
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
beginchar("1",width#,height#,depth#);
%
% "Standard", or "Classical" dial
% with indications for every hour
%
pickup pencircle scaled 5/8thin;
NESW;
pickup pencircle scaled 2/4thin;
for l = 1,2,4,5,7,8,10,11:
numeric x[];
numeric y[];
top z5=(w/2,h-margin);
z7=(w/2,1/2(h-d));
z6=3/36[z5,z7];
draw (z5--z6) rotatedabout (z7,-l*30);
endfor;
endchar;
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
beginchar("2",width#,height#,depth#);
%
% A rather minimalist dial, with
% just a dot marking each hour
%
pickup pencircle scaled 2/4thin;
for l = 0 step 1 until 11:
top z2=(w/2,h-margin-6/8thin);
z1=(w/2,1/2(h-d));
drawdot(z2) rotatedabout (z1,-l*30);
endfor;
endchar;
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
beginchar("3",width#,height#,depth#);
% A radically minimalist dial
pickup pencircle scaled 5/8thin;
NESW;
endchar;
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% The true center of activity:
% create both hands at the same time
%
for minutes = 0 step 1 until 59:
Hands(minutes);
endfor;
end.