Program SGBRB;
Uses WinCrt;

(* Nombre maximum de références supprimées dans une BRB *)
Const NBRMAXREFSUPPR = 20;

(* Nombre maximum de BRB gérées par le programme *)
Const NBRMAXBRB = 10;

(* Nombre de références dans une BRB. Au plus 65535. *)
type NbrRefBrb = Word;

(* Nombre de champs dans une référence. Au plus 65535. *)
type NbrChampsRef = Word;

(* Nombre de mots dans une référence. Au plus 65535. *)
type NbrMotsRef = Word;

(* Nombre de caractères dans une référence. Au plus 65535. *)
type NbrCarsRef = Word;

(* Ensemble des BRB - Représentation fichier *)
(* On stocke dans un fichier l'ensemble des BRB existantes.
   Ce fichier sera chargé en mémoire à chaque exécution du 
   programme. 
   Pour chaque BRB, on connaît la liste des positions de 
   références qui ont été effacées mais sont encore dans
   le fichier de la BRB. *)
(* Attention: toutes les fonctionnalités doivent tenir compte 
   que ces références ont été effacées. *)

type BrbF = Record
	nom: String[8];
	refSuppr: Array[1..NBRMAXREFSUPPR] of NbrRefBrb;
end;

type EnsBrbF = File of BrbF;

(* Ensemble des BRB - Représentation mémoire *)
(* En mémoire, on garde dans un tableau la même information 
   sur les BRBs que dans le fichier des BRBs, plus la 
   référence au fichier texte correspondant
   et la position ou l'on se trouve dans ce fichier. *)
type BrbM = Record
	nom: String[8];
	refSuppr: Array[1..NBRMAXREFSUPPR] of NbrRefBrb;
	fichier: Text;
	pos: NbrRefBrb;
end;

type EnsBrbM = Array[1..NBRMAXBRB] of BrbM;

(* Contenu d'une BRB - Représentation fichier *)
(* Le contenu d'une BRB est un fichier texte dont le nom
   externe est le nom de la BRB suivi de ".brb" *)
type SuiteRef = Text;

(* Statistiques BRB - Représentation fichier *)
(* Les statistiques des références d'une BRB est un fichier 
   de records dont le nom externe est le nom de la BRB suivi 
   de ".ref" *)
type StatsRef = Record
	nbrChamps: NbrChampsRef;
	nbrMots: NbrMotsRef;
	nbrCars: NbrCarsRef;
	freqCars: Array[1..36] of NbrCarsRef;
end;

type StatsBrbF = File of StatsRef;

(* Statistiques Champs - Représentation fichier *)
(* Les statistiques de tous les champs de toutes les 
   références d'une BRB est un fichier de records dont 
   le nom externe est le nom de la BRB suivi 
   de ".cha" *)
type StatsPhrase = Record
	nbrMots: NbrMotsRef;
	nbrCars: NbrCarsRef;
	freqCars: Array[1..36] of NbrCarsRef;
end;

type StatsChamp = record
	statsNomChamp: StatsPhrase;
	statsValeurChamp: StatsPhrase;
end;

type StatsChampsF = File of StatsChamp;

(* Statistiques Mots - Représentation fichier *)
(* Les statistiques de tous les mots de toutes les 
   références d'une BRB est un fichier de records dont 
   le nom externe est le nom de la BRB suivi 
   de ".mot" *)
type StatsMot = Record
	nbrCars: NbrCarsRef;
	freqCars: Array[1..36] of NbrCarsRef;
end;

type StatsMots = File of StatsMot;

(* Statistiques Référence - Représentation mémoire *)
(* liste chainée de statistiques de tous les champs de la
   référence. *)
type PtrCellListeStatsMot = ^CellListeStatsMot;
	CellListeStatsMot = Record
		statsMot: StatsMot;
		suivant: PtrCellListeStatsMot;
end;

type ListeStatsMot = PtrCellListeStatsMot;

type PtrCellListeStatsChamp = ^CellListeStatsChamp;
	CellListeStatsChamp = Record
		statsChamp: StatsChamp;
		statsMots: ListeStatsMot;
		suivant: PtrCellListeStatsChamp;
end;

type ListeStatsChamp = PtrCellListeStatsChamp;

type StatsRefM = Record 
	stats: StatsRef;
	statsChamps: ListeStatsChamp;
end;

(* Relation de synonymie - Représentation fichier *)
(* voir énoncé. Les mots d'une ligne sont triés en ordre
   croissant. *)
(* La relation de synonymie est chargée en mémoire au
   début de l'exécution du programme. *)
type RelSynF = Text;

(* Relation de synonymie - Représentation mémoire *)
(* liste chainée de listes chaînées de mots.
   Chaque liste chainée incluse est triée. *)
type PtrCellListeSyn = ^CellListeSyn;
	CellListeSyn = record
		mot: String;
		suivant: PtrCellListeSyn;
end;

type ListeSyn = PtrCellListeSyn;

type PtrListeEnsSyn = ^ListeEnsSyn;
	ListeEnsSyn = record
		synonymes: ListeSyn;
		suivant: PtrListeEnsSyn;
end;

type RelSynM = PtrListeEnsSyn;

(* Référence - Représentation mémoire *)
(* Liste chaînée de champs. *)
type PtrCellListeChamp =^CellListeChamp;
	CellListeChamp = Record
		nomChamp: String;
		valeurChamp: String;
		suivant: PtrCellListeChamp;
end;

type ListeChamps = PtrCellListeChamp;

type Ref = ListeChamps;

(* Paramètres de similitude *)

type ParamSimMots = record
	synonymes: Boolean;
	diffLongCarMax: Real;
	diffFreqMax: Real;
	ordreStrict: Boolean;
end;

type ParamSimPhrases = record
	diffLongMotsMax: Real;
	diffLongCarMax: Real;
	propMotsNonSimMax: Real;
	diffFreqMax: Real;
	paramSimMots: ParamSimMots;
end;

type ParamSimChamps = record
	paramSimNoms: ParamSimPhrases;
	paramSimValeurs: ParamSimPhrases;
	nomsSim: Boolean;
	valeursSim: Boolean;
end;

type ParamSimRef = record
	diffLongChampsMax: Real;
	diffLongMotsMax: Real;
	diffLongCarMax: Real;
	propChampsNonSimMax: Real;
	diffFreqMax: Real;
	paramSimChamps: ParamSimChamps;
end;

(* Le type LISTEPAIREREF est représenté comme une BRB (fichier texte).
   Les références y sont prises 2 par 2 pour faire des paires. *)


begin
end.

