program cinema;

{ Constantes }

const nb_films   = 5;
      nb_acteurs = 5;


{ D‚finitions des types }

type film = record
          code        : string;
          titre       : string;
          annee       : integer;
          vedettecode : string;
          vedettenom  : string;
end;


type acteur = record
          code   : string;
          nom    : string;
          prenom : string;
          date   : string;
          site   : string;
end;


type liste_films   = array[1..nb_films] of film;

type liste_acteurs = array[1..nb_acteurs] of acteur;


{ Proc‚dures g‚n‚rales pour production de HTML }

procedure LienHTML (var sortie : text ; adresse,texte : string);
begin
  write(sortie,'<A HREF="');
  write(sortie,adresse);
  write(sortie,'">');
  write(sortie,texte);
  writeln(sortie,'</A>');
end;


procedure LienHTMLExterne (var sortie : text ; adresse,texte : string);
begin
  write(sortie,'<A HREF="');
  write(sortie,adresse);
  write(sortie,'" TARGET="_blank">');
  write(sortie,texte);
  writeln(sortie,'</A>');
end;


procedure LienHTMLMail (var sortie : text ; adresse,texte : string);
begin
  write(sortie,'<A HREF="mailto:');
  write(sortie,adresse);
  write(sortie,'">');
  write(sortie,texte);
  writeln(sortie,'</A>');
end;



{ Proc‚dures pour le site HTML du cin‚ma }

procedure TitreNiveauUn (var sortie : text ; titre : string);
begin
  writeln(sortie,'<CENTER>');
  writeln(sortie,'<TABLE><TR><TH>');
  writeln(sortie,'<FONT FACE="helvetica" SIZE="+3" COLOR="#0000FF">');
  writeln(sortie,titre);
  writeln(sortie,'</FONT>');
  writeln(sortie,'</TH></TR></TABLE>');
  writeln(sortie,'</CENTER>');
  writeln(sortie,'<BR><BR>');
end;







procedure EnTeteHTML (var sortie : text ; titre : string);
begin
  writeln(sortie,'<HTML>');
  writeln(sortie,'<HEAD>');
  write(sortie,'<TITLE>Cin&eacute;ma : ');
  write(sortie,titre);
  writeln(sortie,'</TITLE>');
  writeln(sortie,'</HEAD>');
  writeln(sortie,'<BODY BGCOLOR="#FFFFFF" TEXT="#000000">');
  TitreNiveauUn(sortie,'Cin&eacute;ma : '+titre);
end;


procedure FinPageHTML(var sortie : text);
begin
  writeln(sortie,'<BR><BR>');
  LienHTML (sortie,'INDEX.HTM','Retour &agrave; l''accueil');
  writeln(sortie,'<HR>');
  LienHTMLMail (sortie,'toto@univ.fr','Fabien Torre');
  writeln(sortie,'</BODY>');
  writeln(sortie,'</HTML>');
end;


procedure AffichePagePrincipale;
var fichier : text;
begin
  assign(fichier,'INDEX.HTM');
  rewrite(fichier);
  EnTeteHTML (fichier,'Accueil');
  writeln(fichier,'<UL>');
  writeln(fichier,'<LI>');
  LienHTML (fichier,'ACTEURS.HTM','Liste des acteurs');
  writeln(fichier,'<LI>');
  LienHTML (fichier,'FILMS.HTM','Liste des films');
  writeln(fichier,'</UL>');
  FinPageHTML(fichier);
  close(fichier);
end;



{ Proc‚dures d'affichage et de traitement des acteurs }

procedure AfficheActeur (a : acteur);
var fichier : text;
begin
  assign(fichier,a.code+'.HTM');
  rewrite(fichier);

  EnTeteHTML (fichier,a.prenom+' '+a.nom);
  writeln(fichier,'<TABLE CELLPADDING="5" BORDER>');

  writeln(fichier,'<TR><TH>Date de naissance</TH><TD>');
  writeln(fichier,a.date);
  writeln(fichier,'</TD></TR>');

  writeln(fichier,'<TR><TH>Site Officiel</TH><TD>');
  LienHTMLExterne(fichier,a.site,a.site);
  writeln(fichier,'</TD></TR></TABLE>');

  FinPageHTML(fichier);
  close(fichier);
end;


procedure AfficheListeActeurs (l : liste_acteurs);
var i,j        : integer;
    provisoire : acteur;
    fichier    : text;
begin
  assign(fichier,'ACTEURS.HTM');
  rewrite(fichier);
  EnTeteHTML (fichier,'Annuaire des acteurs');

  for i:=1 to nb_acteurs-1 do begin
    for j:=1 to nb_acteurs-i do begin
      if (l[j].nom > l[j+1].nom) then begin
        provisoire := l[j];
        l[j] := l[j+1];
        l[j+1] := provisoire;
      end;
    end;
  end;

  for i:=1 to nb_acteurs do begin
    LienHTML (fichier,l[i].code+'.HTM',l[i].prenom+' '+l[i].nom);
    writeln(fichier,'<BR>');
  end;

  FinPageHTML(fichier);
  close(fichier);
end;



{ Proc‚dures d'affichage et de traitement des films }

procedure AfficheFilm (f : film);
var fichier : text;
begin
  assign(fichier,f.code+'.HTM');
  rewrite(fichier);

  EnTeteHTML (fichier,f.titre);
  writeln(fichier,'<TABLE CELLPADDING="5" BORDER>');

  writeln(fichier,'<TR><TH>Date de sortie</TH><TD>');
  writeln(fichier,f.annee);
  writeln(fichier,'</TD></TR>');

  writeln(fichier,'<TR><TH>Acteur principal</TH><TD>');
  LienHTML(fichier,f.vedettecode+'.HTM',f.vedettenom);
  writeln(fichier,'</TD></TR></TABLE>');

  FinPageHTML(fichier);
  close(fichier);
end;


procedure AfficheListeFilms (l : liste_films);
var i,j        : integer;
    provisoire : film;
    fichier    : text;
begin
  assign(fichier,'FILMS.HTM');
  rewrite(fichier);
  EnTeteHTML (fichier,'Liste des films');

  for i:=1 to nb_films-1 do begin
    for j:=1 to nb_films-i do begin
      if (l[j].titre > l[j+1].titre) then begin
        provisoire := l[j];
        l[j] := l[j+1];
        l[j+1] := provisoire;
      end;
    end;
  end;

  for i:=1 to nb_films do begin
    LienHTML (fichier,l[i].code+'.HTM',l[i].titre);
    writeln(fichier,'<BR>');
  end;

  FinPageHTML(fichier);
  close(fichier);
end;




{ Variables globales }

var i          : integer;
    unacteur   : acteur;
    unfilm     : film;
    mesacteurs : liste_acteurs;
    mesfilms   : liste_films;


{ Programme principal }

begin

  unacteur.code   := 'DEPP';
  unacteur.nom    := 'Depp';
  unacteur.prenom := 'Johnny';
  unacteur.date   := '9 juin 1963';
  unacteur.site   := 'http://';
  mesacteurs[1] := unacteur;

  unacteur.code   := 'MCQUEEN';
  unacteur.nom    := 'McQueen';
  unacteur.prenom := 'Steve';
  unacteur.date   := '24 mai 1930';
  unacteur.site   := 'http://';
  mesacteurs[2] := unacteur;

  unacteur.code   := 'SYLV';
  unacteur.nom    := 'Stallone';
  unacteur.prenom := 'Sylvester';
  unacteur.date   := '6 juillet 1946';
  unacteur.site   := 'http://';
  mesacteurs[3] := unacteur;

  unacteur.code   := 'HANKS';
  unacteur.nom    := 'Hanks';
  unacteur.prenom := 'Tom';
  unacteur.date   := '9 juillet 1956';
  unacteur.site   := 'http://';
  mesacteurs[4] := unacteur;

  unacteur.code   := 'SMITH';
  unacteur.nom    := 'Smith';
  unacteur.prenom := 'Will';
  unacteur.date   := '25 septembre 1968';
  unacteur.site   := 'http://';
  mesacteurs[5] := unacteur;


  unfilm.code        := 'SH';
  unfilm.titre       := 'Sleepy Hollow';
  unfilm.annee       := 1999;
  unfilm.vedettecode := 'DEPP';
  unfilm.vedettenom  := 'Johnny Depp';
  mesfilms[1] := unfilm;


  unfilm.code        := 'ESCAPE';
  unfilm.titre       := 'La grande &eacute;vasion';
  unfilm.annee       := 1963;
  unfilm.vedettecode := 'MCQUEEN';
  unfilm.vedettenom  := 'Steve McQueen';
  mesfilms[2] := unfilm;

  unfilm.code        := 'ROCKY';
  unfilm.titre       := 'Rocky';
  unfilm.annee       := 1976;
  unfilm.vedettecode := 'SYLV';
  unfilm.vedettenom  := 'Sylvester Stallone';
  mesfilms[3] := unfilm;

  unfilm.code        := 'GUMP';
  unfilm.titre       := 'Forrest Gump';
  unfilm.annee       := 1994;
  unfilm.vedettecode := 'HANKS';
  unfilm.vedettenom  := 'Tom Hanks';
  mesfilms[4] := unfilm;

  unfilm.code        := 'MEN';
  unfilm.titre       := 'Men in black';
  unfilm.annee       := 1997;
  unfilm.vedettecode := 'SMITH';
  unfilm.vedettenom  := 'Will Smith';
  mesfilms[5] := unfilm;



  for i:=1 to nb_acteurs do begin
    AfficheActeur(mesacteurs[i]);
  end;
  AfficheListeActeurs(mesacteurs);


  for i:=1 to nb_films do begin
    AfficheFilm(mesfilms[i]);
  end;
  AfficheListeFilms(mesfilms);


  AffichePagePrincipale;


end.


