PROGRAM TP8EXC1 ;
var L, h :integer ;
    reponse, m char ;

PROCEDURE SAUT(n:integer) ;
Var i : integer ;
Begin
  for i:=1 to n do writeln ;
End ;

PROCEDURE ECRIRE(c:char ; n:integer) ;
Var i : integer ;
Begin
  for i:=l to n do write(c) ;
End;

PROCEDURE CADRE(long,haut:integer ; motif:char) ;
Var i, nbsaut, nb_blanc : integer ;
Begin
  nb_saut:=(22-haut) div 2 ;
  nb_blanc:=(80-long) div 2 ;
  clrscr ;
  SAUT(nb_saut) ;
  ECRIRE(' ',nb_blanc) ;
  ECRIRE(motif,long) ;
  if long<80 then writeln ;
  for i:=1 to haut-2 do
      begin
      ECRIRE(' ',nb_blanc) ;
      write(motif) ;
      ECRIRE(' ',long-2) ;
      if long<80
          then writeln(motif)
          else write(motif) ;
      end ;
  ECRIRE(' ',nb_blanc) ;
  ECRIRE(motif,long) ;
  writeln ;
  SAUT(nb_saut) ;
End;

BEGIN (* principal *)
repeat
  clrscr;
  repeat
    write('Longeur totale du cadre à tracer (au plus 80) ? ') ;
    readln(L) ;
    until L<=80 ;
  repeat
    write('Hauteur totale du cadre à tracer (au plus 22) ? ') ;
    readln(h) ;
    until h<=22 ;
    (* 22 pour laisser la place a la question 'Un autre cadre....' *)
  write('caractère de base pour le cadre ? ');readln(m) ;
  CADRE(L,h,m) ;
  write('Un autre cadre (o/n) ? ') ;
  readln(reponse);
until reponse='n' ;
END.