(* ------------------------------------------------------------------------
  :Program.       PubScreen3
  :Contents.      Opens public screen w/ given name in text overscan.
  :Author.        Stefan Hellwig
  :Address.       Oberer Kirchweg 12
  :Address.       3501 Schauenburg 1
  :Address.       Federal Republic of Germany
  :EMail.         Z-Netz : STEFAN_HELLWIG@URANUS.ZER
  :History.       V37.1 7-May-92
  :History.       V37.2 7-May-92 HIRES/LACE added.
  :History.       V37.3 16-Jul-92 bug fixes.
  :Copyright.     (c) 1992 by Stefan Hellwig. Public Domain.
  :Copyright.     For non-commercial use only !
  :Language.      Oberon
  :Translator.    AMIGA OBERON v2.14d
  :Remark.        AmigaOS 2.04 and above only !
  :Remark.        ******** Uses ScreenSupport ! ********
  ------------------------------------------------------------------------ *)

MODULE PubScreen3;

IMPORT
     OS2ChkSmall,
     SS: ScreenSupport,
     RQ: Requests,
     I : Intuition,
     G : Graphics,
     E : Exec,
     D : Dos,
     S : SYSTEM,
     U : Utility;

CONST
     Args = "NAME/A/K,H=HIRES/S,L=LACE/S";
     ArgsNr = 3;
     NameIdx = 0;
     HighIdx = 1;
     LaceIdx = 2;

     ScrollTag = U.Tags1(I.saAutoScroll, I.LTRUE);

TYPE
     ReadArgsArray = ARRAY ArgsNr OF E.APTR;

VAR
     Scr : I.ScreenPtr;

     ScreenTags : SS.StdTagType;
     DisplayID  : LONGINT;
     ErrorCode  : LONGINT;

     ScreenName : SS.NameTypePtr;
     ArgRes : ReadArgsArray;
     RDA    : D.RDArgsPtr;

     VerStr : E.STRING;

     Lace, High : BOOLEAN;

BEGIN
     VerStr := "\o$VER: PubScreen 37.3 (29.8.92) by Stefan Hellwig.\n\r";

     (* Argumente lesen *)
     RDA := D.ReadArgs(Args, ArgRes, NIL);
     IF RDA=NIL THEN
        D.PrintF("PubScreen: Required argument missing.\n");
        HALT(5);
     END;

     (* Zuweisungen und Einstellungen *)

     IF ArgRes[NameIdx]#NIL THEN
        ScreenName := S.VAL(SS.NameTypePtr, ArgRes[NameIdx]);
     END;
     Lace := ArgRes[LaceIdx]#NIL;
     High := ArgRes[HighIdx]#NIL;

     IF High AND ~Lace THEN
        DisplayID := G.hiresKey;
     ELSIF High AND Lace THEN
        DisplayID := G.hiresLaceKey;
     ELSIF ~High AND Lace THEN
        DisplayID := G.loresLaceKey;
     END;

     ScreenTags := SS.StdTags;  (* Standard-Tags *)

     (* --- Hinzufuegen des AutoScroll-Flags --- *)

     ScreenTags[SS.IdxLink].tag := U.more;
     ScreenTags[SS.IdxLink].data:= S.ADR(ScrollTag);

     Scr := SS.OpenPubScr(ScreenTags, ScreenName^, DisplayID, 2, ErrorCode);
     RQ.Assert(Scr#NIL, "PubScreen: OpenScreen failed !");

     (* --- Schliessen des Screens nach letztem Window --- *)

     SS.WaitPubScr(ScreenTags, Scr, TRUE);
CLOSE
     IF RDA#NIL THEN D.FreeArgs(RDA) END;
END PubScreen3.





