MODULE FilterTest ;

(* $VER: FilterTest 1.0 (23.1.96) *)

FROM SYSTEM   IMPORT  ADR, TAG, LONGSET, CAST, ADDRESS ;
FROM Arts     IMPORT  Exit ;
FROM OlfCIO   IMPORT  PrintF ;
FROM UMSUtils IMPORT  CheckUMSError ;
FROM UtilityD IMPORT  tagDone ;

IMPORT  ud : UmsD,
        ul : UmsL,
        usl: UMSSupportL,
        dd : DosD,
        dl : DosL ;

CONST
  cTemplate    = "NAME/A,PASSWORD,SERVER/K,FILTER/A" ;
  cVersion     = "1.0 (23.1.96)" ;
  cVersionInfo = "FilterTest "+cVersion+" by Olaf Peters" ;
  cCVersion    = "$VER: FilterTest "+cVersion ;
  cGetItIn     = ADR(cCVersion) ;

VAR
  argArray  : ARRAY [0..4] OF ud.STRPTR ;
  doArgsPtr,
  rdArgsPtr : dd.RDArgsPtr ;

  tags      : ARRAY [0..31] OF LONGINT ;

  lauf,
  ret,
  num,
  login     : LONGINT ;

BEGIN

  (*/// "Login-Stuff" *)

  FOR lauf := 0 TO 4 DO
    argArray[lauf] := NIL ;
  END (* IF *) ;
  
  doArgsPtr := dl.AllocDosObject(dd.dosRdArgs, NIL) ;
  IF doArgsPtr # NIL THEN
    doArgsPtr^.extHelp := ADR(cVersionInfo+"\n\nUsage: "+cTemplate+"\n") ;
   ELSE
    PrintF("AllocDosObject failed.\n", NIL) ;
    Exit(20) ;
  END (* IF *) ;

  rdArgsPtr := dl.ReadArgs(ADR(cTemplate), ADR(argArray), doArgsPtr) ;

  IF rdArgsPtr = NIL THEN
    PrintF("%s", TAG(tags, doArgsPtr^.extHelp, NIL)) ;
    Exit(20) ;
  END (* IF *) ;

  IF (argArray[0] # NIL) AND (argArray[1] # NIL) THEN
    login := ul.RLogin(CAST(ud.STRPTR, argArray[2]), CAST(ud.STRPTR, argArray[0]), CAST(ud.STRPTR, argArray[1])) ;
    IF login = 0 THEN
      PrintF("Login failed!\n", NIL) ;
      Exit(20) ;
    END (* IF *) ;
  END (* IF *) ;

  PrintF(cVersionInfo+"\n\n", NIL) ;

  (*\\\*)

  ret := usl.FilterExpression(argArray[3], login, LONGSET{}, LONGSET{}, LONGSET{0}) ;
  num := ul.Select(login, TAG(tags, ud.tagSelReadLocal, TRUE,
                                    ud.tagSelMask,      LONGSET{0},
                                    ud.tagSelMatch,     LONGSET{0},
                                    ud.tagSelSet,       LONGSET{},
                                    ud.tagSelUnset,     LONGSET{},
                              tagDone)) ;

  PrintF("FilterExpression returned: %ld. Messages selected: %ld.\n", TAG(tags, ret, num, NIL)) ;

  CheckUMSError(login) ;

CLOSE

  (*/// "Closing-Code" *)

  IF login # 0 THEN
    ul.Logout(login) ;
    login := 0 ;
  END (* IF *) ;
  
  IF rdArgsPtr # NIL THEN
    dl.FreeArgs(rdArgsPtr) ;
    rdArgsPtr := NIL ;
  END (* IF *) ;
  
  IF doArgsPtr # NIL THEN
    dl.FreeDosObject(dd.dosRdArgs, doArgsPtr) ;
    doArgsPtr := NIL ;
  END (* IF *) ;

  (*\\\*)

END FilterTest .
