(* :Version. $VER: XSigGetGroup_Source 0.7 (15.05.94)" *)

MODULE XSigGetGroup;



(*$ DEFINE BETA:=FALSE *)



IMPORT Arguments;
IMPORT Arts;
IMPORT DosD,DosL;
IMPORT Heap;
IMPORT SYSTEM;



CONST
  vers="$VER: XSigGetGroup" (*$ IF BETA *) +"_BETA" (*$ ENDIF *) +" 1.0 (15.05.94)\o";



VAR
  len: INTEGER;
  arg: ARRAY[0..255] OF CHAR;
  newsfile: DosD.FileHandlePtr;
  buffer: POINTER TO ARRAY[0..99999999] OF CHAR;
  act,i,j,size: LONGINT;



BEGIN
  newsfile:=NIL;
  buffer:=SYSTEM.ADR(vers);

  IF Arguments.NumArgs()#1 THEN
    Arts.Exit(10);
  END;

  Arguments.GetArg(1,arg,len);

  newsfile:=DosL.Open(SYSTEM.ADR(arg),DosD.readOnly);
  IF newsfile=NIL THEN
    Arts.Exit(10);
  END;
  size:=DosL.Seek(newsfile,0,DosD.end);
  size:=DosL.Seek(newsfile,0,DosD.beginning);

  Heap.Allocate(buffer,size+16);
  IF buffer=NIL THEN
    Arts.Exit(10);
  END;

  act:=DosL.Read(newsfile,buffer,size);
  DosL.Close(newsfile);
  newsfile:=NIL;

  FOR i:=0 TO size-1 DO
    IF (                        (buffer^[i   ]="\n") AND
         ((buffer^[i+ 1]="N") OR (buffer^[i+ 1]="n")) AND
         ((buffer^[i+ 2]="E") OR (buffer^[i+ 2]="e")) AND
         ((buffer^[i+ 3]="W") OR (buffer^[i+ 3]="w")) AND
         ((buffer^[i+ 4]="S") OR (buffer^[i+ 4]="s")) AND
         ((buffer^[i+ 5]="G") OR (buffer^[i+ 5]="g")) AND
         ((buffer^[i+ 6]="R") OR (buffer^[i+ 6]="r")) AND
         ((buffer^[i+ 7]="O") OR (buffer^[i+ 7]="o")) AND
         ((buffer^[i+ 8]="U") OR (buffer^[i+ 8]="u")) AND
         ((buffer^[i+ 9]="P") OR (buffer^[i+ 9]="p")) AND
         ((buffer^[i+10]="S") OR (buffer^[i+10]="s")) AND
         ((buffer^[i+11]=":") OR (buffer^[i+11]=":")) AND
          (buffer^[i+12]=" ")
       ) OR (
                                                (i=0) AND
         ((buffer^[i   ]="N") OR (buffer^[i   ]="n")) AND
         ((buffer^[i+ 1]="E") OR (buffer^[i+ 1]="e")) AND
         ((buffer^[i+ 2]="W") OR (buffer^[i+ 2]="w")) AND
         ((buffer^[i+ 3]="S") OR (buffer^[i+ 3]="s")) AND
         ((buffer^[i+ 4]="G") OR (buffer^[i+ 4]="g")) AND
         ((buffer^[i+ 5]="R") OR (buffer^[i+ 5]="r")) AND
         ((buffer^[i+ 6]="O") OR (buffer^[i+ 6]="o")) AND
         ((buffer^[i+ 7]="U") OR (buffer^[i+ 7]="u")) AND
         ((buffer^[i+ 8]="P") OR (buffer^[i+ 8]="p")) AND
         ((buffer^[i+ 9]="S") OR (buffer^[i+ 9]="s")) AND
         ((buffer^[i+10]=":") OR (buffer^[i+10]=":")) AND
          (buffer^[i+11]=" ")
       ) THEN
      j:=i+13;
      IF i=0 THEN
        j:=12;
      END;
      WHILE (buffer^[j]#",") AND (buffer^[j]#" ") AND (buffer^[j]#"\n") DO
        act:=DosL.Write(DosL.Output(),SYSTEM.ADR(buffer^[j]),1);
        INC(j);
      END;
      Arts.Exit(0);
    END;
  END;
CLOSE
  IF newsfile#NIL THEN
    DosL.Close(newsfile);
  END;
END XSigGetGroup.mod
