
program xage; {$c-,f-,m-}
type
byte=0..255;

date=record
	month:byte;
	day:byte;
	year:byte;
	end;

var
reference_date,current_date,birthday:date;
cont:char;
continue:boolean;

function age (current_date,birthday:date):real;
var
days_elapse_from_birth_to_current_date,years,days,months:integer;
years_of_age:byte;
months_of_age:real;
days_from_reference_to_current_date,days_birthday_to_reference:integer;




function elapse_time(date_to_use:date):integer;  {internal function}
var
pastdays:byte;

begin
years:=0;
days:=0;
years:= (date_to_use.year - reference_date.year); 

case date_to_use.month of 
1:	days:= 0;
2:	days:= 31;
3:	days:= 59;
4:	days:= 90;
5:	days:= 120;
6:	days:= 151;
7:	days:= 181;
8:	days:= 212;
9:	days:= 243;
10:	days:= 273;
11:	days:= 304;
12:	days:= 334;
end;

days:= days + date_to_use.day + (years div 4); {+ days so far in month
						  and correct for leap years}
days:= days + (years*365); {now add in days of years gone by}
{days should now = total days from date of test to reference year }
elapse_time:=days;
end; {of internal procedure elapse time}



begin { of function age}
years_of_age:=0;
months_of_age:=0;

days_from_reference_to_current_date:= elapse_time(current_date);
days_birthday_to_reference:= elapse_time(birthday);

days_elapse_from_birth_to_current_date:=
 (days_from_reference_to_current_date - days_birthday_to_reference); 

years_of_age:= days_elapse_from_birth_to_current_date div 365;
months_of_age:=
	(days_elapse_from_birth_to_current_date mod 365) div 30;

writeln('years and months of age are= ',years_of_age:3,months_of_age:5:3);
{debug}


if months_of_age > 9 then months_of_age:= months_of_age/100 else 
		          months_of_age:= months_of_age/10;

{convert months of age to decimal representing number of months, not
 fraction of year, eg. age = 12.5 means 12 years and 5 months}


age:= years_of_age + months_of_age;

end; {of procedure}


begin {of main program}
continue:= true;

reference_date.month:=1;
reference_date.day:=1;
reference_date.year:=40;

while continue do
	begin
	writeln(chr(27),'[2J',chr(27),'[1;1H'); {clear screen}
   writeln('Calculate the age of a patient given birth and current date.');

write('Enter current date as  mm, dd,  yy   ');
readln(current_date.month, current_date.day, current_date.year);

writeln;
write('Enter date of birth as mm, dd, yy  ');
readln(birthday.month, birthday.day, birthday.year);



writeln;
writeln;
writeln('Age is : ',age(current_date,birthday):2:2, ' years');

readln(cont);
if cont = chr(27) then continue:= false;
end; {of while}
end. 