home *** CD-ROM | disk | FTP | other *** search
/ Current Shareware 1994 January / SHAR194.ISO / dos_util / 4utils76.zip / GLOBALS.PAS < prev    next >
Pascal/Delphi Source File  |  1993-10-31  |  6KB  |  203 lines

  1. UNIT Globals;
  2. {$D-}
  3. (* ----------------------------------------------------------------------
  4.    Part of 4FF   - 4DOS File Finder
  5.  
  6.    (c) 1992, 1993 Copyright by David Frey,
  7.                                Urdorferstrasse 30
  8.                                8952 Schlieren ZH
  9.                                Switzerland
  10.  
  11.    DISCLAIMER: This unit is freeware: you are allowed to use, copy
  12.                and change it free of charge, but you may not sell or hire
  13.                this part of 4DESC. The copyright remains in our hands.
  14.  
  15.                If you make any (considerable) changes to the source code,
  16.                please let us know. (send a copy or a listing).
  17.                We would like to see what you have done.
  18.  
  19.                We, David Frey and Tom Bowden, the authors, provide absolutely
  20.                no warranty of any kind. The user of this software takes the
  21.                entire risk of damages, failures, data losses or other
  22.                incidents.
  23.  
  24.  
  25.        Code created using Turbo Pascal 6.0 (c) Borland International 1990
  26.  
  27.    This unit provides the string handling and the date/time handling.
  28.  
  29.    ----------------------------------------------------------------------- *)
  30.  
  31. INTERFACE USES Dos, StringDateHandling;
  32.  
  33. CONST MaxComments       = 800;
  34.       MaxFileSpecs      =   6;
  35.       DescLen           =  63;
  36.  
  37. TYPE  DescStr           = STRING[DescLen];
  38.       DescArrayType     = ARRAY[1..MaxComments] OF DescStr;
  39.       NameExtStr        = STRING[8+1+3];
  40.       FileSpecArrayType = ARRAY[1..MaxFileSpecs] OF NameExtStr;
  41.  
  42. (* command line flags: *)
  43.  
  44. VAR   ExactAttr                : BOOLEAN;
  45.       DoScanLZHArchives        : BOOLEAN;
  46.       DoScanZIPArchives        : BOOLEAN;
  47.       DoScanARJArchives        : BOOLEAN;
  48.       SubDirectories, AllDrives: BOOLEAN;
  49.       BareOutput               : BOOLEAN;
  50.       DoPage                   : BOOLEAN;
  51.       Drive                    : CHAR;
  52.  
  53. (* Global variables *)
  54.  
  55. VAR   Attr                     : BYTE;
  56.       DirSize,   TotalSize     : LONGINT;
  57.       FileCount, TotalFileCount: WORD;
  58.  
  59. VAR   FileName                 : NameExtStr;
  60.       Search                   : SearchRec;
  61.       Path                     : PathStr;
  62.       Name                     : NameStr;
  63.       Dir                      : DirStr;
  64.       Ext                      : ExtStr;
  65.  
  66. VAR   InfoArray                : ARRAY[0..5] OF LONGINT;
  67.       AttrStr, FileStr, SizeStr: STRING;
  68.       Date                     : DateStr;
  69.       Time                     : TimeStr;
  70.       DateRec                  : DateTime;
  71.  
  72. VAR   csize                    : LONGINT;    (* compressed size *)
  73.       fstamp                   : DateTime;   (* last mod file date/time (turbo format) *)
  74.       s                        : STRING;
  75.  
  76. (* Templates for FormatStr *)
  77.  
  78. VAR   DateTempl : STRING[4];
  79.       TimeTempl : STRING[4];
  80.       DescTempl : STRING[5];
  81.  
  82. VAR   MaxViewLength : BYTE;
  83.  
  84. (* Buffer related variables: *)
  85.  
  86. CONST MaxBufSize = 65500;
  87.  
  88. TYPE  PBuffer = ^TBuffer;
  89.       TBuffer = ARRAY[0..MaxBufSize] OF BYTE;
  90.  
  91. VAR   BufPtr    : LONGINT;
  92.       BytesRead : WORD;
  93.       BufSize   : WORD;
  94.       FilePtr   : LONGINT;
  95.  
  96. VAR   Buffer    : PBuffer;
  97.  
  98. VAR   Line       : BYTE;
  99.       Redirected : BOOLEAN;
  100.  
  101. PROCEDURE TestForMoreMsg;
  102.  
  103. PROCEDURE InstallBuffer;
  104. PROCEDURE FreeBuffer;
  105. FUNCTION  ReadByte: BYTE;
  106.  
  107. IMPLEMENTATION USES Crt, HandleINIFile;
  108.  
  109. VAR   ScreenHeight : BYTE;
  110.       HilightMore  : BOOLEAN;
  111.  
  112. FUNCTION TestIfRedirected: BOOLEAN;
  113.  
  114. TYPE TPSP = ARRAY[0..$FF] OF BYTE;
  115.  
  116. VAR  PSP  : ^TPSP;
  117.  
  118. BEGIN
  119.  PSP := Ptr(PrefixSeg,0);
  120.  TestIfRedirected := (PSP^[$19] <> 1);
  121. END;
  122.  
  123. PROCEDURE TestForMoreMsg;
  124.  
  125. VAR ch: CHAR;
  126.  
  127. BEGIN
  128.  INC(Line);
  129.  IF KeyPressed OR (Line = ScreenHeight) THEN
  130.   BEGIN
  131.    IF KeyPressed THEN ch := ReadKey;
  132.    HighVideo; Write('-- more --',#13); LowVideo;
  133.    REPEAT UNTIL KeyPressed;
  134.    ch := ReadKey;
  135.    ClrEOL;
  136.    IF Line = ScreenHeight THEN Line := 1;
  137.   END;
  138. END;
  139.  
  140. PROCEDURE InstallBuffer;
  141.  
  142. BEGIN
  143.  IF MaxAvail < MaxBufSize THEN BufSize:= WORD(MaxAvail)
  144.                           ELSE BufSize:= MaxBufSize;
  145.  
  146.  GetMem(Buffer,BufSize);
  147.  IF Buffer = NIL THEN
  148.   BEGIN
  149.    WriteLn(Output);
  150.    WriteLn(Output,'Fatal Error : Unable to allocate Buffer!');
  151.    HALT(255);
  152.   END;
  153. END; (* InstallBuffer *)
  154.  
  155. PROCEDURE FreeBuffer;
  156.  
  157. BEGIN
  158.  FreeMem(Buffer,BufSize);
  159. END; (* FreeBuffer *)
  160.  
  161. FUNCTION ReadByte: BYTE;
  162.  
  163. BEGIN
  164.  ReadByte := Buffer^[BufPtr]; INC(BufPtr); INC(FilePtr);
  165. END; (* ReadByte *)
  166.  
  167.  
  168. BEGIN
  169.  Str(Length(DateFormat),DateTempl); DateTempl := '%'+DateTempl+'s';
  170.  Str(Length(TimeFormat),TimeTempl); TimeTempl := '%'+TimeTempl+'s';
  171.  
  172.  Assign(Output,''); Rewrite(Output);
  173.  Redirected := TestIfRedirected; DirectVideo := NOT Redirected;
  174.  
  175.  IF Redirected THEN
  176.   BEGIN
  177.    MaxViewLength := 255; DescTempl := '%-s';
  178.    Assign(Output,''); Rewrite(Output);
  179.  
  180.    DoPage := FALSE;
  181.   END
  182.  ELSE
  183.   BEGIN
  184.    AssignCrt(Output); Rewrite(Output);
  185.  
  186.    MaxViewLength := Lo(WindMax)-33-Length(DateFormat)-Length(TimeFormat);
  187.    Str(MaxViewLength,DescTempl); DescTempl := '%-'+DescTempl+'s';
  188.    ScreenHeight := Hi(WindMax);
  189.  
  190.    IF IniFileExists THEN
  191.     BEGIN
  192.      HilightMore := (ReadSettingsString('4FF','hilightmore','y') = 'y') OR
  193.                     (ReadSettingsString('4FF','hilightmore','y') = 'yes');
  194.      DoPage      := (ReadSettingsString('4FF','dopage','n') = 'y') OR
  195.                     (ReadSettingsString('4FF','dopage','n') = 'yes');
  196.     END
  197.    ELSE
  198.     BEGIN
  199.      HilightMore := TRUE;
  200.      DoPage      := FALSE;
  201.     END;
  202.   END;
  203. END.