/* 
 *  Clock (winclock.h)
 *
 *  Copyright 1998 by Marcel Baur <mbaur@g26.ethz.ch>
 *  This file is essentially rolex.c by Jim Peterson.
 *  Please see my winclock.c and/or his rolex.c for references.
 *
 */

 #include <windows.h>
 
typedef struct
{
  int StartX,StartY,EndX,EndY;
} HandData;

/* function prototypes */


void DrawFace(HDC dc);


void DrawHourHand(HDC dc);
void DrawMinuteHand(HDC dc);
void DrawSecondHand(HDC dc);
BOOL UpdateHourHand(HDC dc,int MidX,int MidY,int XExt,int YExt,WORD Pos);
BOOL UpdateMinuteHand(HDC dc,int MidX,int MidY,int XExt,int YExt,WORD Pos);
BOOL UpdateSecondHand(HDC dc,int MidX,int MidY,int XExt,int YExt,WORD Pos);
void Idle(HDC idc);

