(**********************************************************************

    :Program.    Request.mod
    :Contents.   Request benutzt alternativ den FileRequester der ASL-,
    :Contents.   oder falls diese nicht vorhanden ist, den der ARP-Li-
    :Contents.   brary
    :Author.     Dieter WILHELM
    :Address.    Albert-Schweitzer-Str.44, 8000 München 83
    :Phone.      089/671693
    :Copyright.  PD
    :Language.   Modula-2
    :Translator. M2Amiga A+L V4.0d
    :Imports.    ArpD
    :History.    V1.0 Dieter WILHELM 28.Sept.1990

**********************************************************************)

IMPLEMENTATION MODULE Request;


  FROM AslD       IMPORT AslTags, aslFileRequest;
  FROM OptAslL    IMPORT AllocAslRequest, FreeAslRequest, AslRequest,
                         aslBase;
  FROM UtilityD   IMPORT tagEnd;
  FROM ArpD       IMPORT FileName, DirName;
  FROM IntuitionD IMPORT WindowPtr, NewWindow, customScreen;
  FROM IntuitionL IMPORT WBenchToFront, ScreenToFront;
  FROM ExecL      IMPORT OpenLibrary;
  FROM SYSTEM     IMPORT ADR, TAG;
  FROM String     IMPORT Copy, Compare;
  IMPORT as: AslD, ar: ArpD, arL: ArpLopt;


  VAR aslOk   : BOOLEAN;
      aslFReq : as.FileRequesterPtr;
      myTags  : ARRAY[0..8] OF LONGINT;
      arpFReq : ar.FileRequester;
      hName   : fString;
      hDir    : fString;
      arpName : FileName;
      arpDir  : DirName;
      oldW    : WindowPtr;
      dummy   : BOOLEAN;
      text    : ARRAY [0..30] OF CHAR;


  PROCEDURE Req(W: WindowPtr; VAR Name: fString; VAR Dir:
                fString; Titel: ARRAY OF CHAR): BOOLEAN;
    BEGIN
      IF aslOk THEN
        IF ((oldW # W) AND (aslFReq # NIL)) OR (Compare(Titel, text) # 0) OR
          (Compare(Dir, hDir) # 0) THEN
          FreeAslRequest(aslFReq);
          aslFReq := NIL;
        END;  (* IF oldW *)
        IF aslFReq = NIL THEN
          hName := Name; hDir := Dir;
          Copy(text, Titel);
          aslFReq := AllocAslRequest(aslFileRequest, TAG(myTags,
                                     aslWindow, W,
                                     aslHail, ADR(text),
                                     aslFile, ADR(hName),
                                     aslDir, ADR(hDir),
                                     tagEnd));
          oldW := W;
        END;  (* IF aslFReq *)
        IF AslRequest(aslFReq, NIL) THEN
          Copy(Name, aslFReq^.file^);
          Copy(Dir, aslFReq^.dir^);
          RETURN TRUE;
        ELSE
          RETURN FALSE;
        END;  (* IF AslRequest *)
      ELSE  (* IF aslOk *)
        IF W # NIL THEN
          dummy := WBenchToFront();
        END;  (* IF W *)
        IF Compare(arpName, Name) # 0 THEN
          Copy(arpName, Name);
        END;  (* IF Compare *)
        IF Compare(arpDir, Dir) # 0 THEN
          Copy(arpDir, Dir);
        END;  (* IF Compare *)
        arpFReq.ddef := ADR(arpName); arpFReq.ddir := ADR(arpDir);
        Copy(text, Titel);
        arpFReq.hail := ADR(text);
        IF arL.FileRequest(ADR(arpFReq)) # NIL THEN
          Copy(Name, arpName);
          Copy(Dir, arpDir);
          IF W # NIL THEN
            ScreenToFront(W^.wScreen);
          END;  (* IF W *)
          RETURN TRUE;
        ELSE  (* IF arL. *)
          IF W # NIL THEN
            ScreenToFront(W^.wScreen);
          END;  (* IF W *)
          RETURN FALSE;
        END;  (* IF arL. *)
      END;  (* IF aslOk *)
  END Req;

  BEGIN
    aslORarp := FALSE;
    aslFReq := NIL; oldW := NIL; text := "";
    IF aslBase # NIL THEN
      aslOk := TRUE; aslORarp := TRUE;
    ELSE
      aslOk := FALSE;
      arL.optArpLibBase := OpenLibrary(ADR("arp.library"), 34);
      IF arL.optArpLibBase # NIL THEN
        arpFReq.funcFlags := ar.FileReqFlagSet{};
        aslORarp := TRUE;
      END;  (* IF arl. *)
    END;  (* IF aslBase *)

  CLOSE
    IF aslFReq # NIL THEN
      FreeAslRequest(aslFReq);
      aslFReq := NIL;
    END;  (* IF *)

END Request.
