anchor.diff:    function listAsteriskPath(const aPath: string; aList: TStrings; someExts: TStrings = nil): boolean;
   
     (**
  -   * Lets the shell open a file.
  +   * Lets the shell open a file
      *)
     function shellOpen(const aFilename: string): boolean;
   
  
positive.code:   end;
  end;
  
  procedure processOutputToStrings(proc: TProcess; strings: TStrings);
  var
    str: TMemoryStream;
  begin
    if not (poUsePipes in proc.Options) then
      exit;
    //
    str := TMemoryStream.Create;
    try
      processOutputToStream(proc, str);
      str.Position := 0;
      strings.LoadFromStream(str);
    finally
      str.Free;
    end;
  end;
  
  procedure processOutputToStream(proc: TProcess; stream: TMemoryStream);
  var
    sum, cnt: Integer;
    buffSz: Integer;
  begin
    if not (poUsePipes in proc.Options) then
      exit;
    //
    buffSz := proc.PipeBufferSize;
    sum := stream.Size;
    stream.Position := sum;
    repeat
      stream.SetSize(sum + buffSz);
      cnt := proc.Output.Read((stream.Memory + sum)^, buffSz);
      sum += cnt;
    until (proc.Output.NumBytesAvailable = 0) or (cnt = 0);
    stream.size := sum;
    stream.Position := sum;
  end;
  
  procedure killProcess(var aProcess: TAsyncProcess);
  
negative.code:   function exeInSysPath(anExeName: string): boolean;
  
    (**
     * Returns the full to anExeName. Works if exeInSysPath().
     *)
    function exeFullName(anExeName: string): string;
  
    (**
     * Clears then fills aList with aProcess output stream.
     *)
    procedure processOutputToStrings(aProcess: TProcess; var aList: TStringList);
  
    (**
     * Copy available process output to a stream.
     *)
    procedure processOutputToStream(aProcess: TProcess; output: TMemoryStream);
  
    (**
     * Terminates and frees aProcess.
  