{Returns a string or an integer, what ever you want}
{You fix for leap year}

unit dow;
interface

const
  saDayOfWeek : array [0..6] of string =
     ('Monday','Tuesday','Wednesday','Thursday',
     'Friday','Saturday','Sunday');

type
   spString  = ^string;

function IntDow(yyyy,mm,dd : integer) : integer;
function StrDow(yyyy,mm,dd : integer) : spString;

implementation
   
function IntDow(yyyy,mm,dd : integer) : integer;
   var
      iAddVal : shortint;
   begin
      if mm < 3 then iAddVal := 1 else iAddVal := 0;
      IntDow := (((3*(yyyy)-(7*((yyyy)+((mm)+9) div 12)) 
         div 4+(23*(mm)) div 9+(dd)+2 
         +(((yyyy)-iAddVal) div 100+1)*3 div 4-16) mod 7));
   end;

function StrDow(yyyy,mm,dd : integer): spString;
   var 
      sReturnString : string;
   begin
      sReturnString := saDayOfWeek[IntDow(yyyy, mm, dd)];
      StrDow := @sReturnString;
   end;   
end.
{test file}

uses dow;
begin
   write(StrDow(1995, 10,08)^);
end.
