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

  1. Program BatMenu;
  2. { Programme à insérer dans un fichier BATCH de menu }
  3. { Le programme transmet le choix effectué par l'intermédiaire de
  4.   errorlevel. }
  5. { KB mai 1994 }
  6.  
  7. {.$DEFINE debug}
  8.  
  9. {$IFDEF debug}
  10.  {$A+,B-,D+,E-,F-,I+,L+,N-,R+,S+,V-,W+,X+}
  11. {$ELSE}
  12.  {$A+,B-,D-,E-,F-,I+,L-,N-,R-,S-,V-,W+,X+}
  13. {$ENDIF}
  14.  
  15. Uses Dos,
  16.      UDrivers,UMem,
  17.      OTableau,
  18.      OGenView,OTxtView,ODialWin;
  19.  
  20. Const
  21.  BatFileName='MENU.BAT';
  22.  
  23. Type
  24.  
  25.  PBatMenuWin=^TBatMenuWin;
  26.  TBatMenuWin=object(TSelWin)
  27.   Items:TTableau;
  28.   Constructor Init(NomFichier:PathStr);
  29.   Destructor Done;virtual;
  30.   Function Ligne(n:Integer):String;virtual;
  31.   Function NombreItems:Integer;virtual;
  32.   Procedure HandleEvent(Var Event:TEvent);virtual;
  33.   End;
  34.  
  35.  TBatMenuApp=object(TTextApp)
  36.   Menu:PBatMenuWin;
  37.   Constructor Init;
  38.   End;
  39.  
  40. Const
  41.  EndCode:Byte=0;
  42.  Maxlen=40;
  43.  
  44. Procedure Traite(Var Ligne:String);
  45. Var Car:Char;
  46.     Rang:Byte;
  47. Begin
  48.  Rang:=Pos('#',Ligne);
  49.  if Rang=0
  50.     then begin
  51.           Ligne:='Rien';
  52.           Exit;
  53.          end
  54.     else begin
  55.           Ligne:=Copy(Ligne,Rang+1,length(Ligne)-Rang);
  56.           if length(Ligne)>MaxLen
  57.              then Ligne[0]:=chr(MaxLen);
  58.          end;
  59. End;
  60.  
  61. { objet TBatMenuWin }
  62.  
  63. Constructor TBatMenuWin.Init(NomFichier:PathStr);
  64. Var Fichier:Text;
  65.     Tempo:string;
  66.     l,h:Byte;
  67. Begin
  68.  TSelWin.Init(0,0,8,2,'');
  69.  Ident:='MENU';
  70.  Items.Init(10,5,maxlen+1);
  71.  assign(fichier,NomFichier);
  72.  {$I-}
  73.  reset(fichier);
  74.  {$I+}
  75.  if IOResult<>0
  76.     then begin
  77.           ErrorFlag:=2;
  78.           exit;
  79.          end;
  80.  l:=0;
  81.  While not Eof(fichier) do
  82.   begin
  83.    Readln(fichier,Tempo);
  84.    Traite(Tempo);
  85.    if Tempo <> 'Rien'
  86.       then begin
  87.             Items.Ajouter(Tempo);
  88.             if length(Tempo)>l
  89.                then l:=length(Tempo);
  90.            end;
  91.   end;
  92.  Close(fichier);
  93.  Origin.X:=(80-l-4) div 2;
  94.  h:=NombreItems;
  95.  if h>20
  96.     then h:=20;
  97.  Origin.Y:=(24-h-2) div 2;
  98.  Size.X:=l+3;
  99.  Size.Y:=h+2;
  100. End;
  101.  
  102. Destructor TBatMenuWin.Done;
  103. Begin
  104.  Items.Done;
  105.  TSelWin.Done;
  106. End;
  107.  
  108. Function TBatMenuWin.Ligne(n:Integer):String;
  109. Var S:String;
  110. Begin
  111.  if (n<1) or (n>NombreItems)
  112.     then S:=''
  113.     else Items.Lire(S,n);
  114.  Ligne:=S;
  115. End;
  116.  
  117. Function TBatMenuWin.NombreItems:Integer;
  118. Begin
  119.  NombreItems:=Items.NombreItems;
  120. End;
  121.  
  122. Procedure TBatMenuWin.HandleEvent(Var Event:TEvent);
  123. Begin
  124.  TSelWin.HandleEvent(Event);
  125.  if ExitCode=exOk
  126.     then begin
  127.           EndCode:=Choix;
  128.           QuitMsg:=Ligne(Choix);
  129.          end;
  130.  if ExitCode<>0
  131.     then SetCommand(cmQuit);
  132. End;
  133.  
  134. { objet TBatMenuApp }
  135.  
  136. Constructor TBatMenuApp.Init;
  137. Var S:String;
  138. Begin
  139.  TTextApp.Init;
  140.  Titre:='BATMENU (KB mai 1994)';
  141.  EndCode:=0;
  142.  if paramcount>0
  143.     then S:=paramstr(1)
  144.     else S:=BatFileName;
  145.  Menu:=new(PBatMenuWin,Init(S));
  146.  if not Menu^.IsValid
  147.     then begin
  148.           Message(' Erreur d''initialisation ! ');
  149.           dispose(Menu,Done);
  150.           SetCommand(cmQuit);
  151.          end
  152.     else begin
  153.           Insert(Menu);
  154.           Menu^.Select;
  155.          end;
  156. End;
  157.  
  158.  
  159. {************************ Début du Programme *****************************}
  160.  
  161. Var BatMenuApp:TBatMenuApp;
  162.     b:Byte;
  163. Begin
  164.  {$ifdef debug}
  165.  initmem;
  166.  {$endif}
  167.  BatMenuApp.Init;
  168.  b:=BatMenuApp.Exec;
  169.  BatMenuApp.Done;
  170.  {$ifdef debug}
  171.  diagmem;
  172.  {$endif}
  173.  Halt(EndCode);
  174. End.
  175.  
  176. {                        Fin du fichier BatMenu.Pas                         }
  177.