(*----------------------------------------------------------------------------
  :Program.    Started
  :Author.     Thomas Igracki
  :Version.    V1.1
  :Date.       11-Jan-92
  :Copyright.  PD
  :Language.   Oberon
  :Translator. Amiga Oberon 2.13d
  :Contents.   Dieses Programm prüft, ob ein bestimmtes CLI-Programm aktiv ist.
  :Contents.   Wenn es NICHT aktiv ist, dann gibt es WARN zurück.
  :Usage.      Started <Command>
  :Remark.     Läuft erst ab Kick 2.0!
  :History.    V1.1: Sun 08-Mar-92 - Dos.ReadArgs() anstatt Arguments.GetArg()
------------------------------------------------------------------------------*)
MODULE Started;
IMPORT e: Exec, d: Dos, s: SYSTEM;
CONST v = '$VER: Started V1.1 (08-Mar-92) by Thomas Igracki';
TYPE
   ArgsStruct = STRUCT END;
VAR 
    tasks   : d.TaskArrayPtr;
    i       : INTEGER;
    name    : ARRAY 50 OF CHAR;
    File    : e.STRPTR;
    proc    : d.ProcessPtr;
    dos     : d.DosLibraryPtr;
    RDArgs  : d.RDArgsPtr;
    args    : STRUCT (du:ArgsStruct) com: e.STRPTR END;

PROCEDURE ReadArgs*{dos,-798}(template{1}  : ARRAY OF CHAR;
                              array{2}     : ArgsStruct;
                              args{3}      : d.RDArgsPtr): d.RDArgsPtr;

PROCEDURE Upper*(VAR s: ARRAY OF CHAR);
(* wandelt alle Buchstaben in Großbuchstaben um. Ist für Caseinsensives
   Vergleichen nützlich *)
VAR i: INTEGER;
BEGIN
  i := 0; WHILE (s[i]#0X) AND (i<LEN(s)) DO s[i] := CAP(s[i]); INC(i) END;
END Upper;

BEGIN
     s.SETREG(0,v[0]); (* Nur damit der String nicht wegoptimiert wird! *)
     IF e.exec.softVer < 36 THEN
        s.SETREG(0,d.Write(d.Output(),'This Program needs Kick 2.0!\n',29)); HALT(20)
     END;
     dos := d.dos; RDArgs := ReadArgs ('file/A',args,NIL);
     IF RDArgs = NIL THEN
       d.PrintF ("Usage : Started <Command>\n\tReturns WARN, if <Command> was NOT started.\n");
       HALT(20)
     END;
     Upper (args.com^); tasks := d.dos.root.taskArray;
     i := 0;
     REPEAT
        (* IF tasks.cli[i].sigTask.node.type = e.process THEN ist unnötig *)
        proc := tasks.cli[i].sigTask;
        IF proc # NIL THEN
           (* BSTR nach CStr umwandeln *)
           File := s.VAL(s.ADDRESS,s.VAL(LONGINT,proc.cli.commandName)*4+1);

           COPY (File^,name); Upper (name); File := d.FilePart (name);
           IF args.com^ = File^ THEN HALT(d.ok) END;
        END;
        INC(i)
     UNTIL i = tasks.maxCLI;
     HALT(d.warn)
END Started.
