(* ------------------------------------------------------------------------
  :Program.       TReq
  :Contents.      Turns DOS-Requesters on and off
  :Usage.         Usage: TReq PROCESS
  :Usage.         PROCESS is the name of the process otherwise the
  :Usage.         current process is affected
  :Author.        Kai Bolay [kai]
  :Address.       Snail-Mail:            E-Mail:
  :Address.       Hoffmannstraße 168     UUCP: kai@amokle.adsp.sub.org
  :Address.       D-7250 Leonberg 1      FIDO: 2:2407/104.3
  :History.       v1.0 [kai] 18-May-92
  :History.       v1.1 [kai] 21-May-92 (+ Forbid-Locking)
  :Copyright.     FD
  :Language.      Oberon
  :Translator.    AMIGA OBERON v2.25d
  :Remark.        Requires OS 2.04
------------------------------------------------------------------------ *)
MODULE TReq;

IMPORT
  d: Dos, e: Exec, y: SYSTEM;
CONST
  Template = "PROCESS";
  Version = "$VER: TReq 1.1 (21-May-92) by Kai Bolay\n\r";
VAR
  RD: d.RDArgsPtr;
  Array: ARRAY 1 OF LONGINT;
  TaskName: e.STRPTR;
  Process: d.ProcessPtr;

BEGIN
  y.SETREG (0, d.Write (d.Output (), Version[6], y.SIZE (Version)-6));
  (* 2.04 should be :-) *)
  IF d.dos.lib.version < 37 THEN
    IF d.Output () # NIL THEN
      y.SETREG (0, d.Write (d.Output (), "Sorry, I need OS 2.04!\n", 23));
    END;
    HALT (20);
  END;
  RD := d.ReadArgs (Template, Array, NIL);
  IF RD = NIL THEN
    d.PrintF ("\[1mUsage: TReq %s\[0m\nTurns DOS-Requesters on and off\n",
              y.ADR (Template));
    HALT (20);
  END;
  e.Forbid;
  IF Array[0] = NIL THEN
    Process := e.FindTask (NIL);
  ELSE
    TaskName := y.VAL (e.STRPTR, Array[0]);
    Process := e.FindTask (TaskName^);
    IF Process = NIL THEN
      d.PrintF ("Process not found!\n");
      HALT (20);
    END;
  END;
  IF Process.task.node.type # e.process THEN
    d.PrintF ("This is no Process!\n");
    HALT (20);
  END;
  IF Process.windowPtr # -1 THEN
    Process.windowPtr := -1;
    d.PrintF ("DOS-Requesters are now turned off!\n");
    HALT (0);
  ELSE
    Process.windowPtr := 0;
    d.PrintF ("DOS-Requesters are now turned on!\n");
    HALT (5);
  END;
  e.Permit;
CLOSE
  IF RD # NIL THEN d.FreeArgs (RD); RD := NIL END;
END TReq.
