(* Программа lookout сообщает об изменении файла *)

uses linux,stdio;

const
  MFILE=10;

var
  sb:tstat;
  j:integer;
  last_time:array [1..MFILE] of longint;

procedure sleep(t:longint);cdecl;external 'c';

procedure cmp(name:string;last:longint);
begin
  (*
   * Проверять время изменения файла,
   * если можно считать данные о файле.
   *)
  if not fstat(name,sb) or (sb.mtime <> last) then
  begin
    writeln('lookout: файл ',name,' изменился');
    halt(0);
   end;
end;


begin
  if (paramcount < 1) then
  begin
    writeln('Применение: lookout имя_файла ...');
    halt(1);
  end;
  if (paramcount > MFILE) then
  begin
    writeln('lookout: слишком много имен файлов');
    halt (1);
  end;
  (* Инициализация *)
  for j:=1 to paramcount do
  begin
    if not fstat(paramstr(j), sb) then
    begin
      writeln ('lookout: ошибка вызова stat для ', paramstr(j));
      halt(1);
    end;
    last_time[j]:=sb.mtime;
  end;
  (* Повторять до тех пор, пока файл не изменится *)
  while true do
  begin
    for j:=1 to paramcount do
      cmp(paramstr(j), last_time[j]);
      (*
       * Остановиться на 60 секунд.
       * Функция 'sleep' стандартная
       * библиотечная процедура UNIX.
       *)
    sleep (60);
  end;
end.


