home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 19 / CD_ASCQ_19_010295.iso / dos / prg / pas / ktools / source / ofhelp.pas < prev    next >
Pascal/Delphi Source File  |  1994-09-17  |  3KB  |  118 lines

  1. Unit OFHelp;
  2. { Objet THelpFile, dérivé de l'objet TTextFile et destiné à gérer un
  3. fichier d'aide. }
  4. { KB Mai 1994 }
  5. {
  6.   Cet objet permet de lire un fichier d'aide écrit sous forme de fichier
  7. texte avec la convention suivante : chaque paragraphe commence par le
  8. symbole # suivi de son titre. La longueur maxi du titre est fixée par
  9. la constante MaxTitre.
  10.   Lors de l'initialisation, on construit une table contenant les titres
  11. de paragraphes et leur adresse dans le fichier. On utilise ensuite cette
  12. table pour accéder au paragraphe choisi.
  13. }
  14.  
  15. Interface
  16.  
  17. Uses OFText,        { objet fichier texte bufférisé }
  18.      OTableau;      { objet tableau }
  19.  
  20. Const MaxTitre=20;
  21.  
  22. Type
  23.    PHelpItem=^THelpItem;
  24.    THelpItem=record
  25.     Nom: String[MaxTitre];
  26.     Position:LongInt;
  27.     end;
  28.  
  29.    PHelpFile=^THelpFile;
  30.    THelpFile=object(TTextFile)
  31.     TabItems:TTableau;    { tableau contenant des THelpItem }
  32.     Constructor Init(NomDeFichier:String);
  33.     { ouverture du fichier et allocation mémoire }
  34.     Destructor Done; virtual;
  35.     { fermeture du fichier et libération mémoire }
  36.     Function FindItem(AName:String):Boolean;
  37.     { place le pointeur au début du paragraphe de titre AName }
  38.     Function NombreItems:Integer;
  39.     { renvoie le nombre de paragraphes }
  40.     Function Titre(n:Integer):String;
  41.     { renvoie le titre du paragraphe n }
  42.     End;
  43.  
  44. Implementation
  45.  
  46. { Objet THelpFile }
  47.  
  48. Constructor THelpFile.Init(NomDeFichier:String);
  49. Var S:String;
  50.     HItem:THelpItem;
  51.     i,b:Byte;
  52. Begin
  53.  TTextFile.Init(NomDeFichier,16*1024);
  54.  TabItems.Init(50,50,sizeof(THelpItem));
  55.  if not IsValid then exit;
  56.  while not EndOfFile do
  57.    begin
  58.     S:=GetLine;
  59.     if S[1]='#'
  60.        then begin
  61.              while (S[1]='#') or (S[1]=' ') do S:=copy(S,2,length(s)-1);
  62.              while S[length(S)]=' ' do dec(S[0]);
  63.              for i:=1 to length(S) do S[i]:=UpCase(S[i]);
  64.              HItem.Nom:=S;
  65.              HItem.Position:=GetFilePosit;
  66.              TabItems.Ajouter(HItem);
  67.             end;
  68.    end;
  69. End;
  70.  
  71. Destructor THelpFile.Done;
  72. Begin
  73.  TabItems.Done;
  74.  TTextFile.Done;
  75. End;
  76.  
  77. Function THelpFile.FindItem(AName:String):Boolean;
  78. Var Res,PN:Integer;
  79.     HItem:THelpItem;
  80.     i:byte;
  81. Begin
  82.  Res:=0;
  83.  For i:=1 to length(AName) do AName[i]:=upcase(AName[i]);
  84.  PN:=1;
  85.  while (PN<=TabItems.NombreItems) and (Res=0) do
  86.   begin
  87.    TabItems.Lire(HItem,PN);
  88.    if HItem.Nom=AName
  89.       then begin
  90.             Res:=PN;
  91.             SetFilePosit(HItem.Position);
  92.            end;
  93.    inc(PN);
  94.   end;
  95.  FindItem:=Res<>0;
  96. End;
  97.  
  98. Function THelpFile.NombreItems:Integer;
  99. Begin
  100.  NombreItems:=TabItems.NombreItems;
  101. End;
  102.  
  103. Function THelpFile.Titre(n:Integer):String;
  104. Var HItem:THelpItem;
  105. Begin
  106.  if (n<1) or (n>NombreItems)
  107.     then begin
  108.           Titre:='';
  109.           exit;
  110.          end;
  111.  TabItems.Lire(HItem,n);
  112.  Titre:=HItem.Nom;
  113. End;
  114.  
  115. End.
  116.  
  117. {                         Fin du Fichier OFHelp.Pas                         }
  118.