program ColinFibonacci;
 
 procedure drawwindow;			{This procedure regulates the draw window size.}
  var
   textrect: rect;
 begin
  setrect(textrect, 10, 30, 500, 480);
  settextrect(textrect);
  showtext;
 end;
 function Fibmaker (anynum: integer): longint;
 begin
  if (anynum = 1) or (anynum = 2) then
   Fibmaker := 1
  else
   Fibmaker := Fibmaker(anynum - 1) + Fibmaker(anynum - 2);
 end;
 
 procedure Welcome;
  var
   i: integer;
 begin
  writeln('Hello, and welcome to Colin''s Fibonacci number generating program. In this');
  writeln('program, you can display any term of the sequence of Fibonacci Numbers, and');
  writeln('all the Fibonacci numbers that lead up to it. Here''s an example : ');
  writeln('Your Input: 5');
  for i := 1 to 5 do
   writeln(Fibmaker(i) : 1);
  writeln('Get the picture? Good.');
 end;
 
 procedure GetInfo;
  var
   i: integer;
   x: integer;
 begin
  writeln('How many Fibonacci numbers would you like to see? {A natural number please}');
  repeat
   readln(i);
   if i < 0 then
    writeln('For the love of God, enter a POSITIVE INTEGER!');
  until i > 0;
  for x := 1 to i do
   writeln(Fibmaker(x) : 1);
 end;
 
 var
  Again: char;
  GoodChoice: Boolean;
 
begin
 drawwindow;
 welcome;
 repeat
  GetInfo;
  GoodChoice := True;
  writeln('Would you like to get another sequence of Fibonacci numbers? (Y/N)');
  repeat
   if GoodChoice = false then
       writeln('Let''s stop being silly.  Now enter either Y, y, N or n.');
       readln(Again);
   if Again in ['Y', 'y', 'N', 'n'] then
    GoodChoice := True
   else
    GoodChoice := false;
  until GoodChoice;
 until Again in ['n', 'N'];
 writeln('Thanks for using this program, if you have any questions or comments,');
 writeln('then e-mail Colin at ColinCool@hotmail.com.  Press Return to quit.');
 readln;
end.