groffstudio

Diff
Login

Diff

Differences From Artifact [e7a21d0ab7]:

To Artifact [befb5316ad]:


40
41
42
43
44
45
46
47
48
49
50

51
52
53
54
55
56
57
58
59

60
61
62
63

64
65
66
67
68
69
70

71

72
73
74
75
76
77
78
79
80
81

82
83
84
85

86
87
88
89
90
91
92
93
94
95
96
97
98
99
100



101
102
103
104
105


106
107
108
109
40
41
42
43
44
45
46


47
48
49
50






51

52

53


54
55


56
57
58
59
60

61










62




63















64
65
66


67
68
69
70
71
72
73
74
75







-
-


+

-
-
-
-
-
-

-
+
-

-
-
+

-
-




+
-
+
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-



+
+





implementation

{$R *.lfm}

function TBuildStatusWindow.BuildDocument(CommandLine: String; LogFile: String): Boolean;
var
  p: TProcess;
  n, total: LongInt;
  str: String;
  lh: TextFile;
  ret: Boolean;
begin
  p := TProcess.Create(nil);
  p.Options := p.Options + [poUsePipes, poStderrToOutPut];
  p.ShowWindow := swoHIDE;

  ShowMessage(CommandLine);

{$IFDEF WINDOWS}
  p.Executable := 'cmd';
  ret := RunCommand('cmd', ['/c', CommandLine], str, [], swoHIDE);
  p.Parameters.Add('/c');
{$ELSE}
  p.Executable := '/bin/sh';
  p.Parameters.Add('-c');
  ret := RunCommand('sh', ['-c', CommandLine], str, [], swoHIDE);
{$ENDIF}
  p.Parameters.Add(CommandLine);
  p.Execute;

  if LogFile <> '' then
  begin
    AssignFile(lh, LogFile);
    try
    Rewrite(lh);
      ReWrite(lh);

    total := 0;

    while p.Running do
    begin
      n := p.Output.Read(str, 2048);
      total := total + n;
      if n > 0 then
      begin
        writeln(lh, str);
      Write(lh, str);
      end
      else Sleep(100);
    end;

    finally
    { We might have some buffer contents left. }
    repeat
      n := p.Output.Read(str, 2048);
      total := total + n;
      if n > 0 then
      begin
        writeln(lh, str);
      end;
    until n <= 0;

    if total = 0 then writeln(lh, 'No errors occurred. :-)');

    CloseFile(lh);
  end;

      CloseFile(lh);
    end;
  end;
  result := p.ExitStatus > 0;
  p.Free;

  { Close the status window: }
  Close;

  Result := ret;
end;

end.