anchor.diff:    {$IFDEF WINDOWS}
     Windows,
     {$ENDIF}
  -  ActnList, dialogs, forms, process;
  +  ActnList, dialogs, forms, process, asyncprocess;
   
   const
     DdiagFilter = 'D source|*.d|D interface|*.di|All files|*.*';
  
positive.code:    * Returns true if anExeName can be spawn without its full path.
     *)
    function exeInSysPath(anExeName: string): boolean;
  
  implementation
  
  
negative.code:     exit(ExeSearch(anExeName, '') <> '');
  end;
  
  procedure processOutputToStrings(const aProcess: TProcess; var aList: TStringList);
  var
    str: TMemoryStream;
    sum: Integer;
    cnt: Integer;
  const
    buffSz = 1024;
  begin
    if not (poUsePipes in aProcess.Options) then
      exit;
    //
    sum := 0;
    str := TMemoryStream.Create;
    try
      while aProcess.Output.NumBytesAvailable <> 0 do begin
        str.Size := str.Size + buffSz;
        cnt := aProcess.Output.Read((str.Memory + sum)^, buffSz);
        sum += cnt;
      end;
      str.Size := sum;
      aList.LoadFromStream(str);
    finally
      str.Free;
    end;
  end;
  
  procedure killProcess(var aProcess: TAsyncProcess);
  begin
    if aProcess = nil then
      exit;
    if aProcess.Running then
      aProcess.Terminate(0);
    aProcess.Free;
    aProcess := nil;
  end;
  
  initialization
    RegisterClasses([TMRUList, TMRUFileList]);
    DExtList := TStringList.Create;
  