home *** CD-ROM | disk | FTP | other *** search
- Unit OFHelp;
- { Objet THelpFile, dérivé de l'objet TTextFile et destiné à gérer un
- fichier d'aide. }
- { KB Mai 1994 }
- {
- Cet objet permet de lire un fichier d'aide écrit sous forme de fichier
- texte avec la convention suivante : chaque paragraphe commence par le
- symbole # suivi de son titre. La longueur maxi du titre est fixée par
- la constante MaxTitre.
- Lors de l'initialisation, on construit une table contenant les titres
- de paragraphes et leur adresse dans le fichier. On utilise ensuite cette
- table pour accéder au paragraphe choisi.
- }
-
- Interface
-
- Uses OFText, { objet fichier texte bufférisé }
- OTableau; { objet tableau }
-
- Const MaxTitre=20;
-
- Type
- PHelpItem=^THelpItem;
- THelpItem=record
- Nom: String[MaxTitre];
- Position:LongInt;
- end;
-
- PHelpFile=^THelpFile;
- THelpFile=object(TTextFile)
- TabItems:TTableau; { tableau contenant des THelpItem }
- Constructor Init(NomDeFichier:String);
- { ouverture du fichier et allocation mémoire }
- Destructor Done; virtual;
- { fermeture du fichier et libération mémoire }
- Function FindItem(AName:String):Boolean;
- { place le pointeur au début du paragraphe de titre AName }
- Function NombreItems:Integer;
- { renvoie le nombre de paragraphes }
- Function Titre(n:Integer):String;
- { renvoie le titre du paragraphe n }
- End;
-
- Implementation
-
- { Objet THelpFile }
-
- Constructor THelpFile.Init(NomDeFichier:String);
- Var S:String;
- HItem:THelpItem;
- i,b:Byte;
- Begin
- TTextFile.Init(NomDeFichier,16*1024);
- TabItems.Init(50,50,sizeof(THelpItem));
- if not IsValid then exit;
- while not EndOfFile do
- begin
- S:=GetLine;
- if S[1]='#'
- then begin
- while (S[1]='#') or (S[1]=' ') do S:=copy(S,2,length(s)-1);
- while S[length(S)]=' ' do dec(S[0]);
- for i:=1 to length(S) do S[i]:=UpCase(S[i]);
- HItem.Nom:=S;
- HItem.Position:=GetFilePosit;
- TabItems.Ajouter(HItem);
- end;
- end;
- End;
-
- Destructor THelpFile.Done;
- Begin
- TabItems.Done;
- TTextFile.Done;
- End;
-
- Function THelpFile.FindItem(AName:String):Boolean;
- Var Res,PN:Integer;
- HItem:THelpItem;
- i:byte;
- Begin
- Res:=0;
- For i:=1 to length(AName) do AName[i]:=upcase(AName[i]);
- PN:=1;
- while (PN<=TabItems.NombreItems) and (Res=0) do
- begin
- TabItems.Lire(HItem,PN);
- if HItem.Nom=AName
- then begin
- Res:=PN;
- SetFilePosit(HItem.Position);
- end;
- inc(PN);
- end;
- FindItem:=Res<>0;
- End;
-
- Function THelpFile.NombreItems:Integer;
- Begin
- NombreItems:=TabItems.NombreItems;
- End;
-
- Function THelpFile.Titre(n:Integer):String;
- Var HItem:THelpItem;
- Begin
- if (n<1) or (n>NombreItems)
- then begin
- Titre:='';
- exit;
- end;
- TabItems.Lire(HItem,n);
- Titre:=HItem.Nom;
- End;
-
- End.
-
- { Fin du Fichier OFHelp.Pas }
-