(* $S- $F- $N- $R- $V- *)
IMPLEMENTATION MODULE FileReq;

FROM SYSTEM    IMPORT ADR,ADDRESS;
FROM RCT       IMPORT FileReq,FileReqFlags,FileReqFlagSet,RCTFileRequester,
                      DSIZE,FSIZE,WILDLENGTH,Alert;
FROM Str       IMPORT Length,Copy,Concat,LastPos;
FROM Intuition IMPORT WindowPtr,IDCMPFlagSet,
                      IntuiTextLength,ScreenPtr,ScreenToFront;
FROM Exec      IMPORT AllocMem,FreeMem,MemReqs,MemReqSet,CopyMem;

VAR
  fr    : RCTFileRequester;

PROCEDURE FR(VAR FName: ARRAY OF CHAR; text:INTEGER; win:WindowPtr):BOOLEAN;
  PROCEDURE GetPath(VAR f,d:ARRAY OF CHAR);
    VAR
      pos,i:INTEGER;
    BEGIN
      Copy(d,f);
      pos:=LastPos(f,-1,'/');
      IF pos<0 THEN
        pos:=LastPos(f,-1,':');
      END;
      IF pos>=0 THEN
        INC(pos);
        d[pos]:=0C;
        FOR i:=pos TO Length(f) DO
          f[i-pos]:=f[i]
        END;
        f[i]:=0C;
      ELSE
        d[0]:=0C
      END;
    END GetPath;

  VAR
    ndir  : ARRAY [0..DSIZE] OF CHAR;
    nfile : ARRAY [0..FSIZE] OF CHAR;
    npath : ARRAY [0..DSIZE+FSIZE+1] OF CHAR;
    field : ARRAY [0..24] OF CHAR;
    i     : INTEGER;
    ptr   : POINTER TO CARDINAL;
    b     : BOOLEAN;
  BEGIN
    Copy(npath,FName);
    Copy(nfile,FName);
    GetPath(nfile,ndir);

    ptr:=ADR(fr);
    FOR i:=1 TO SIZE(fr) DIV 2 DO
      ptr^:=0; INC(ptr,2);
    END;

    WITH fr DO
      dir:=ADR(ndir); file:=ADR(nfile); path:=ADR(npath);
      IF ld THEN
        title:=ADR("Laden");
        flags:=FileReqFlagSet{absolute,noHalfCache,load};
      ELSE
        title:=ADR("Speichern");
        flags:=FileReqFlagSet{absolute,noHalfCache,save};
      END;
    END;
    b:=FileReq(ADR(fr));
    IF b THEN
      Copy(FName,npath);
    END;
    RETURN b;
  END FR;

END FileReq.
