home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 11 Util / 11-Util.zip / COMPRESS.ZIP / COMPRESS.MOD < prev    next >
Text File  |  1991-02-18  |  3KB  |  115 lines

  1. MODULE Compress;
  2.  
  3.  
  4. IMPORT
  5.   Dos,
  6.   Lib,
  7.   Str,
  8.   IO;
  9.  
  10.  
  11. TYPE
  12.   FName             = ARRAY [1..255] OF CHAR;
  13.  
  14.  
  15. VAR
  16.   OrgPath           : FName;
  17.   SubStr            : ARRAY [1..2] OF CHAR;
  18.   SubDirs           : BOOLEAN;
  19.  
  20.  
  21. PROCEDURE Compress_Dir(DirName : ARRAY OF CHAR; SubDir : BOOLEAN);
  22.   VAR
  23.     SearchName      : FName;
  24.     TempName        : FName;
  25.     DirHandle       : Dos.HDIR;
  26.     SearchBuf       : Dos.FILEFINDBUF;
  27.     SearchCount     : CARDINAL;
  28.     First           : BOOLEAN;
  29.     Buffer          : ARRAY [1..1024] OF CHAR;
  30.     BytesRead       : CARDINAL;
  31.     BytesWritten    : CARDINAL;
  32.     Dummy           : CARDINAL;
  33.     OK              : BOOLEAN;
  34.   BEGIN
  35.     DirHandle   := 0FFFFH;
  36.     SearchCount := 1;
  37.     First       := TRUE;
  38.     Str.Copy(SearchName, DirName);
  39.     Str.Append(SearchName, '*');
  40.     Str.Copy(TempName, DirName);
  41.     Str.Append(TempName, 'Mikaels.$$$');
  42.     WHILE (First AND (Dos.FindFirst(SearchName,DirHandle,CARDINAL({1,4}),SearchBuf,SIZE(SearchBuf),SearchCount,0) = 0)) OR
  43.           (NOT First AND (Dos.FindNext(DirHandle,SearchBuf,SIZE(SearchBuf),SearchCount) = 0)) DO
  44.       First := FALSE;
  45.       IF NOT (4 IN BITSET(SearchBuf.attrFile)) THEN
  46.         IO.WrStr(DirName);
  47.         IO.WrStr(SearchBuf.name);
  48.         IO.WrStr(' <- ');
  49.         OK := FALSE;
  50.         Str.Concat(SearchBuf.name, DirName, SearchBuf.name);
  51.         IF Dos.Copy(SearchBuf.name, TempName, CARDINAL({0}), 0) = 0 THEN
  52.           IF Dos.Delete(SearchBuf.name, 0) = 0 THEN
  53.             IF Dos.Move(TempName, SearchBuf.name, 0) = 0 THEN
  54.               OK := TRUE;
  55.             END;
  56.           END;
  57.         END;
  58.         IF OK THEN
  59.           IO.WrStr('OK');
  60.         ELSE
  61.           IO.WrStr('Failed');
  62.         END;
  63.         IO.WrLn;
  64.       ELSIF (Str.Compare('.',SearchBuf.name) <> 0) AND (Str.Compare('..',SearchBuf.name) <> 0) AND SubDir THEN
  65.         Str.Concat(SearchBuf.name, DirName, SearchBuf.name);
  66.         Str.Concat(SearchBuf.name, SearchBuf.name, '\');
  67.         Compress_Dir(SearchBuf.name, SubDir);
  68.       END;
  69.       IF IO.KeyPressed() AND (IO.RdKey() = CHR(27)) THEN
  70.         IO.WrLn;
  71.         IO.WrStr('Terminated by user');  IO.WrLn;
  72.         IO.WrLn;
  73.         HALT;
  74.       END;
  75.     END;
  76.   END Compress_Dir;
  77.  
  78.  
  79. BEGIN
  80.   IF (Lib.ParamCount() = 0) OR (Lib.ParamCount() > 2) THEN
  81.     IO.WrLn;
  82.     IO.WrStr('Usage: ');   IO.WrLn;
  83.     IO.WrLn;
  84.     IO.WrStr('  Compress <path> [/S]');  IO.WrLn;
  85.     IO.WrLn;
  86.     IO.WrStr('    <path>     Path to be compressed (syntax: C:\Dir\');   IO.WrLn;
  87.     IO.WrStr('    [/S]       Compress subdirectories (optional)');   IO.WrLn;
  88.     IO.WrLn;
  89.     IO.WrStr('  Example: Compress \ /S    compresses the entire hard disk');  IO.WrLn;
  90.     IO.WrLn;
  91.   ELSE
  92.     SubDirs := FALSE;
  93.     Lib.ParamStr(OrgPath, 1);
  94.     IF Lib.ParamCount() > 1 THEN
  95.       Lib.ParamStr(SubStr, 2);
  96.       Str.Caps(SubStr);
  97.       IF Str.Compare('/S', SubStr) = 0 THEN
  98.         SubDirs := TRUE;
  99.       ELSE
  100.         IO.WrLn;
  101.         IO.WrStr('Invalid option: ');
  102.         IO.WrStr(SubStr);
  103.         IO.WrLn;
  104.         IO.WrLn;
  105.         HALT;
  106.       END;
  107.     END;
  108.     IO.WrLn;
  109.     IO.WrStr('OS/2 disk compression.        (c) 1991 by Mikael Wahlgren');   IO.WrLn;
  110.     IO.WrStr("Press <Esc> to exit (don't Ctrl-Break!)");   IO.WrLn;
  111.     IO.WrLn;
  112.     Compress_Dir(OrgPath, SubDirs);
  113.   END;
  114. END Compress.
  115.