home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 19 / CD_ASCQ_19_010295.iso / dos / prg / pas / ktools / source / zipview.pas < prev   
Pascal/Delphi Source File  |  1994-11-17  |  4KB  |  193 lines

  1. Program ZipView;
  2. { Visualisation de fichiers ZIP }
  3. { K.B. juin 1994 }
  4.  
  5. {.$DEFINE debug}
  6.  
  7. {$IFDEF debug}
  8.  {$A+,B-,D+,E-,F-,I+,L+,N-,R+,S+,V-,W+,X+}
  9. {$ELSE}
  10.  {$A+,B-,D-,E-,F-,I+,L-,N-,R-,S-,V-,W+,X+}
  11. {$ENDIF}
  12.  
  13. Uses Dos,
  14.      UMem,UDrivers,UTextScr,
  15.      OFZip,
  16.      OGenView,OTxtView,ODialWin;
  17.  
  18. Const
  19.  cmInit=$300;
  20.  cmOpen=$301;
  21.  
  22. Type
  23.  PZipWin=^TZipWin;
  24.  TZipWin=object(TSelWin)
  25.   Table:TZipTab;
  26.   Constructor Init(NomDeFichier:PathStr);
  27.   Destructor Done;virtual;
  28.   Procedure Draw;virtual;
  29.   Function Ligne(n:Integer):String;virtual;
  30.   Function NombreItems:Integer;virtual;
  31.   Function GetErrorMsg:String;virtual;
  32.   End;
  33.  
  34.  PZipApp=^TZipApp;
  35.  TZipApp=object(TTextApp)
  36.   Constructor Init;
  37.   Procedure HandleEvent(var Event:TEvent); virtual;
  38.   Procedure InitStatusLine; virtual;
  39.   Procedure MakeZipWin(S:PathStr);
  40.   End;
  41.  
  42. { objet TZipWin }
  43.  
  44. Constructor TZipWin.Init(NomDeFichier:PathStr);
  45. Var D:DirStr;
  46.     N:NameStr;
  47.     E:ExtStr;
  48. Begin
  49.  FSplit(NomDeFichier,D,N,E);
  50.  TSelWin.Init(1,2,53,20,N+E);
  51.  Ident:='ZIPWIN';
  52.  Table.Init(NomDeFichier);
  53.  if not Table.IsValid
  54.     then begin
  55.           ErrorFlag:=2;
  56.           exit;
  57.          end;
  58. End;
  59.  
  60. Destructor TZipWin.Done;
  61. Begin
  62.  Table.Done;
  63.  TSelWin.Done;
  64. End;
  65.  
  66. Procedure TZipWin.Draw;
  67. Var S,T:String;
  68. Begin
  69.  if not IsValid
  70.     then exit;
  71.  TSelWin.Draw;
  72.  Str(Table.NombreItems,T);
  73.  S:='[Fichiers: '+T+' ';
  74.  Str(Table.TailleDecomp:1:0,T);
  75.  S:=S+'Taille: '+T+' octets]';
  76.  Ecrire(S,(largeur-length(S)) div 2,hauteur+1,0);
  77. End;
  78.  
  79. Function TZipWin.Ligne(n:Integer):String;
  80. Var S:String;
  81.     P:PFileZipDatas;
  82. Begin
  83.  if (n<1) or (n>NombreItems)
  84.     then S:=''
  85.     else begin
  86.           Table.Lire(p,n);
  87.           S:=ZNom(P^)+' '+Longueur(P^)+' '+Taille(P^)+' '+
  88.              Ratio(P^)+'  '+ZDate(P^);
  89.          end;
  90.  Ligne:=S;
  91. End;
  92.  
  93. Function TZipWin.NombreItems:Integer;
  94. Begin
  95.  NombreItems:=Table.NombreItems;
  96. End;
  97.  
  98. Function TZipWin.GetErrorMsg:String;
  99. Begin
  100.  case ErrorFlag of
  101.   0: GetErrorMsg:='';
  102.   1: GetErrorMsg:=TSelWin.GetErrorMsg;
  103.   else GetErrorMsg:=Table.GetErrorMsg;
  104.   end;
  105. End;
  106.  
  107. { objet TZipApp }
  108.  
  109. Constructor TZipApp.Init;
  110. Begin
  111.  TTextApp.Init;
  112.  Titre:='Contenu d''un fichier ZIP';
  113.  if ParamCount>0
  114.     then SetCommand(cmInit)
  115.     else SetCommand(cmOpen);
  116. End;
  117.  
  118. Procedure TZipApp.InitStatusLine;
  119. Begin
  120.  StatusLine:=New(PStatusLine,Init);
  121.  with StatusLine^ do
  122.   begin
  123.    AjouterItem('AltX Quitter',AltX);
  124.    AjouterItem('F2 Fichiers', F2);
  125.   end;
  126. End;
  127.  
  128. Procedure TZipApp.HandleEvent(Var Event:TEvent);
  129. Var S : String;
  130. Begin
  131.  TTextApp.HandleEvent(Event);
  132.  case Event.What of
  133.   evCommand:
  134.    case Event.Command of
  135.     cmInit:
  136.       begin
  137.        S:=ParamStr(1);
  138.        MakeZipWin(S);
  139.       end;
  140.     cmOpen:
  141.       begin
  142.        S:=GetFile('*.ZIP');
  143.        if S<>''
  144.           then begin
  145.                 ClearDeskTop;
  146.                 MakeZipWin(S);
  147.                end;
  148.       end;
  149.     else exit;
  150.     end;
  151.   evKeyDown:
  152.    case Event.KeyCode of
  153.     F2 : SetCommand(cmOpen);
  154.     else exit;
  155.     end;
  156.   else exit;
  157.   end;
  158.  Event.What:=evNothing;
  159. End;
  160.  
  161. Procedure TZipApp.MakeZipWin(S:PathStr);
  162. Var ZipWin:PZipWin;
  163. Begin
  164.  if S=''
  165.     then exit;
  166.  ZipWin:=New(PZipWin,Init(S));
  167.  if ZipWin^.IsValid
  168.     then begin
  169.           Insert(ZipWin);
  170.           ZipWin^.Show;
  171.          end
  172.     else begin
  173.           Message(ZipWin^.GetErrorMsg);
  174.           dispose(ZipWin,Done);
  175.          end;
  176. End;
  177.  
  178. Var ZipApp : TZipApp;
  179.  
  180. Begin
  181.  {$ifdef debug}
  182.  initmem;
  183.  {$endif}
  184.  ZipApp.Init;
  185.  if ZipApp.IsValid
  186.     then ZipApp.Exec
  187.     else writeln(ZipApp.GetErrorMsg);
  188.  ZipApp.Done;
  189.  {$ifdef debug}
  190.  diagmem;
  191.  {$endif}
  192. End.
  193.