Cooking with Delphi - Part 5Finally, bringing it all together...
procedure
TKitchen.MakeTurkeyDinner(numberOfGuests : integer);
var
   BakingPan : TLargeSturdyBakingPan;
   CookingTime : TCookingTime;
begin
   Helper.Name := 'RT';
   OnInitializeEvent := SendToThePub(Helper, Helper_Motivator);
   OnBeforePrepareEvent := StoveOven.SetOvenTemperature(350_Degrees);
   OnAfterPrepareEvent := PrepareSideDishes;
   Turkey.WeightInPounds := 4 + (numberOfGuests * 2);
   Turkey.OnAfterCookedEvent := SetTable;
   Helper.OnAfterDinnerEvent := CleanDishes(Helper_Motivator);
   Cook.OnAfterDinnerEvent := TakeLongNap;
   BakingPan.Depth.Min := miTwoInches;
   BakingPan.Width.Min := Turkey.Circumference + miOneInch;
   PrepareTheStuffing;
   PrepareTheTurkey;
   CookingTime.Duration := tTwoHours + ApproximateMinutesCookingTime;
   BakingPan.Place(Turkey,pCenter);
   BakingPan.Cover('Aluminum Foil');
   StoveOven.Bake(BakingPan,CookingTime.Duration);
   Cook.PrepareSideDishes;
   if Available(BottleOfMerlotInCupboard) then
     Cook.Fetch(BottleOfMerlotInCupboard);
   while (Turkey.TimeCooked < CookingTime.Duration)
     or (MeatThermometer < 165_Degrees_Farenheit) do
   begin
     if (TimeSinceLastChecked >= tOneHour) then
     begin
       StoveOven.Open;
       BakingPan.UnCover;
       Turkey.Skin.Baste('Juices From Pan');
       BakingPan.ReCover;
       StoveOven.Close;
     end;
     if (not BottleOfMerlotInCupboard.Empty) then
       BottleOfMerlotInCupboard.Drink('glass');
   end;
   Cook.ServeFood(VarArrayOf[
       Turkey,
       TurkeyStuffing.Remainder,
       SideDish1,
       SideDish2,
       SideDish3,
       SideDish4,
       Dressing1,
       Dressing2,
       BottleOfWhiteZinfandel]);
   Helper.Carve(Turkey);
   Cook.SitDownAndEat;
   Helper.SitDownAndEat;
   Cook.ServeFood([Dessert1]);
   Cook.TakeLongNap;
   Helper.CleanUpKitchen;
end;
![[Wow!]](graemlins/wow.gif)