home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / share / fileshar / xargs.pas < prev   
Pascal/Delphi Source File  |  1988-04-16  |  4KB  |  99 lines

  1. {
  2.   XArgs - A unit to expand filespecs on the command line
  3.   version 1.0 4/16/88
  4.   by Richard S. Sadowsky    CIS: 74017,1670
  5.  
  6.   Released as is to the public domain by the author.
  7.  
  8.   This program expands all the filespecs on the command line and puts them
  9.   in a single list, Args.  The Word Var NArgs returns the number of filespecs
  10.   in the list (Args).  Any number of filespecs may be given and they may
  11.   contain wildcards (* and ?).
  12.  
  13.   Will abort program if too many files are found (maximum specified by constant
  14.   MAX_ARGS).  You don't see more than 1000 files in a single directory often,
  15.   but if this is the case, you can increase the size of MAX_ARGS.
  16.   NOTE: Doing so will increase the data size of any program that uses this
  17.   unit.  It already uses a good chunk or memory (about 12K of data space)!
  18.   This is really a quick and dirty approach useful in a command line utility
  19.   program (like NFLAG.PAS).  A linked list on the heap might consume energy
  20.   more efficiently, but this suits our purpose just the same.  This unit will
  21.   only work with filespecs in the current directory, no path portion of the
  22.   filespec may be specified.
  23.  
  24. }
  25. {$S-,I-,V-}
  26.  
  27. unit XArgs;
  28.  
  29. interface
  30.  
  31. uses DOS;
  32.  
  33. const
  34.   MAX_ARGS         = 1024; { this number determines the maximum number    }
  35.                            { of file names that can be held in the list.  }
  36.                            { Since it is used as a ceiling for the array, }
  37.                            { this number determines the amount of RAM     }
  38.                            { eaten up by the Args Array. }
  39. type
  40.   FileName         = String[12];
  41.   ArgsType         = Array[1..MAX_ARGS] of FileName;  { list type to hold }
  42.                                                       { the expanded file }
  43.                                                       { names }
  44.  
  45. var
  46.   Args             : ArgsType;  { this is where the expanded filenames    }
  47.                                 { are held, allowing them to accessed     }
  48.                                 { by a program that USES this unit.       }
  49.  
  50.   NArgs            : Word;      { number of file names in the Args list   }
  51.  
  52. implementation
  53.  
  54. function ExpandArgs(var Args : ArgsType) : Word;
  55. { expand any wildcards on the command line into file names.  All file names, }
  56. { whether specified explicitly or via a wildcard expansion, are added to the }
  57. { global var Args.  The var NArgs specifies the number of filenames in the   }
  58. { list }
  59. var
  60.   I,Num            : Word;
  61.   S,FName          : String;
  62.   DirInfo          : SearchRec;
  63.  
  64. procedure AddArgs(var FName : FileName);
  65. { add the file name to Args and increment NArgs }
  66. begin
  67.   Inc(Num);
  68.   if Num > MAX_ARGS then begin { check for overflow, since Range checking }
  69.                                { turned off }
  70.     WriteLn('Argument overflow - Too many files found');
  71.     Halt(1);
  72.   end;
  73.   Args[Num] := FName
  74. end;
  75.  
  76. begin
  77.   Num := 0;
  78.   for I := 1 to ParamCount do begin
  79.     FName := ParamStr(I);
  80.     if (Pos('*',FName) > 0) or (Pos('?',FName) > 0) then begin
  81.       { expand filename w/wildcard }
  82.       FindFirst(FName,Archive,DirInfo);
  83.       while DOSError = 0 do begin
  84.         AddArgs(DirInfo.Name);    { add each file matching filespec to }
  85.                                   { Args }
  86.         FindNext(DirInfo);
  87.       end; {while}
  88.     end
  89.     else
  90.       AddArgs(FName); { no wildcard so just add the file to Args }
  91.   end;
  92.   ExpandArgs := Num
  93. end;
  94.  
  95. begin { of Unit XArgs }
  96.   NArgs := ExpandArgs(Args);  { expand the command line and export the }
  97.                               { results }
  98. end. { of Unit XArgs }
  99.