DEFINITION MODULE WbClone;
(*$ LargeVars:=FALSE NameChk:=FALSE *)

(*
 * Dieses Modul bietet eine sehr einfache Möglichkeit, einen
 * Screen mit einem daraufliegenden Window zu öffnen.
 *
 * Der Screen entspricht dabei, bis auf die Anzahl der BitPlanes,
 * die beim Aufruf vorgegeben wird, genau dem Workbench-Screen,
 * auch im Overscan- oder Interlace-Modus.
 * Unter Kickstart 2.0 wird der Screen im "new look" geöffnet,
 * ein darauf erscheinender FileRequester der asl.library oder
 * weitere Windows mit Rahmen erscheinen dann z.B. im 3D-Look
 * (natürlich nur bei mindestens 2 Bitplanes).
 * Die Tiefe des Screens ist mit Sicherheit auf 4 begrenzt, in
 * manchen Modi des Amiga 3000 (Productivity, A2024 oder
 * SuperHiRes) sind lediglich 2 Planes erlaubt. Falls in diesem
 * Fall eine größere Tiefe gewünscht wird, wird sie auf die
 * maximale Anzahl gesetzt. Die Anzahl ist u.U. nach dem Öffnen
 * zu überprüfen!
 * Der zugeordnete Font ist der Default-Font.
 *
 * Das Window ist vom Typ backdrop, borderless, smartrefresh.
 * Es werden keine IDCMPFlags zugeordnet, diese können bei Bedarf
 * nachträglich durch ModifyIDCMP angegeben werden.
 *
 * Falls der scrTitle=NIL ist, wird das Fenster genauso groß wie
 * der Screen, ansonsten bleibt oben die Screen-Leiste sichtbar
 * und das Fenster wird entsprechend kleiner.
 * Die tatsächliche Größe muß nach dem Öffnen aus der Window-
 * Struktur ausgelesen werden.
 *
 * In den Variablen sind nach dem Öffnen die ensprechenden Werte
 * eingetragen, bei Nichterfolg wird das Programm durch Arts.Error
 * abgebrochen.
 *
 * Beim Öffnen eines neuen Screens/Windows wird vorher der alte
 * automatisch geschlossen, ebenfalls beim Programm-Ende.
 *
 * Das Schließen geschieht sehr sauber:
 * 1.: Eine evtl. angebrachte Menuleiste wird entfernt.
 * 2.: Alle anstehenden Messages werden beantwortet.
 * 3.: Alle IDCMPFlags werden gelöscht.
 * 4.: Das Window wird geschlossen.
 * 5.: Der Screen wird geschlossen.
 * 6.: Die Variablen werden mit NIL belegt.
 *)


FROM SYSTEM	IMPORT ADDRESS;
FROM IntuitionD	IMPORT WindowPtr, ScreenPtr;
FROM GraphicsD	IMPORT RastPortPtr;

TYPE
  Depth=[1..4];

VAR
  (*$ LongAlign:=TRUE *) (* ab 68020 nur von Vorteil! *)
  bdScreen  :ScreenPtr;
  bdWindow  :WindowPtr;
  bdRp	    :RastPortPtr;(* RastPort des Windows, also geclippt! *)

PROCEDURE OpenWbClone(
	scrDepth:Depth;		(* Tiefe des Screens *)
	scrTitle:ADDRESS	(* oder NIL *)
	);

PROCEDURE CloseWbClone; (* ist auch CLOSE-Procedure *)

END WbClone.def
