(*
-------------------------------------------------------------------------------
@@@@@@@@@@@@@@@@@@@@@*)  DEFINITION  MODULE  Area2;  (*@@@@@@@@@@@@@@@@@@@@@@@@
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
| Kurzbeschreibung   | Verwaltung von Doppelfenstern: oben ein separates      |
|                    | Fenster fuer Titel etc.                                |
---------------------+---------------------------------------------------------
| Programm - Version |  1.1   |   Text - Version        |   V#004             |
---------------------+--------+-------------------------+----------------------
| Modulholder        |  WS    |   Urversion     |  WS   |   Januar 89         |
---------------------+---------------------------------------------------------
| System - Version   | OS-9, Miele-Modula-2 3.5                               |
---------------------+---------------------------------------------------------
| Copyright          | Freigegeben fuer nichtkommerzielle Nutzung             |
|                    |  durch Teilnehmer am EFFO                              |
---------------------+---------------------------------------------------------
| Hardware           | GEPARD 68010, 1 MByte RAM, 80Zeichen-Textkarte         |
---------------------+---------------------------------------------------------
| besondere Importe  |                                                        |
-------------------------------------------------------------------------------
| Autoren            |  WS    | Werner Stehling, Seilerwis 3,                 |
|                    |        | CH-8606 Greifensee, Tel. 01/256 42 21         |
---------------------+---------------------------------------------------------
|   U P D A T E S    |                                                        |
----------------------                                                        |
|   Datum   Version  Autor  Bemerkungen                                       |
| --------  -------  -----  -----------                                       |
|  7. 2.89    1.1      WS   SetTemp2 neu                                      |
|  9. 2.89    1.1      WS   ResetAktiv2 definiert zum Beschleunigen           |
|                                                                             |
-------------------------------------------------------------------------------
| Modul-Beschreibung |         siehe  area.def, areaio.def                    |
----------------------                                                        |
| Verwaltung von zwei Fenstern gemeinsam, wobei das obere Fenster als Titel-  |
| bereich angesehen wird.                                                     |
|                                                                             |
| SetAktiv2 behandelt ein Doppelfenster als Einheit. Dagegen kann durch       |
| die Prozeduren  SetAktiv (aus Area) und  SetAktivt  zwischen dem            |
| eigentlichen Fenster und seinem Titelbereich gewechselt werden. Alle        |
| Prozeduren aus AreaIO usw. koennen natuerlich auch im Titelfenster          |
| verwendet werden.                                                           |
|                                                                             |
|                                                                             |
| W A R N U N G :                                                             |
| ===============                                                             |
| Die Prozeduren dieses Moduls und darauf aufbauender Module duerfen nicht    |
| gemeinsam mit anderen I/O-Prozeduren (z.B. aus InOut) verwendet werden, da  |
| ueber den Bildschirm-Inhalt und die Cursorpositionen separat Buch gefuehrt  |
| wird.                                                                       |
-------------------------------------------------------------------------------
*)

FROM  Area      IMPORT  Area;

EXPORT  QUALIFIED       MakeArea2, SetAktiv2, ResetAktiv2, SetAktivt,
                        GetAreaPar2, PositArea2, DimArea2, ReturnArea2,
                        ClearArea2, SetTemp2, WriteLnt, WriteTitel;

(*==========================================================================*)
(****   Prozeduren zur Fensterverwaltung                                 ****)
(*==========================================================================*)
(*--------------------------------------------------------------------------*)
	PROCEDURE  MakeArea2 (x0, y0, dx, dy, dw : CARDINAL) : Area;

(* neuen Bereich auf dem Schirm einrichten                                  *)
(* x0 und y0 sind die Position des ersten Characters des Titels oben links  *)
(* dx und dy sind Breite und Hoehe des eigentlichen Fensters                *)
(* dw ist die Hoehe des Titelfensters der Groesse  dx * dw                  *)
(* die linke obere Ecke des Rahmens wird bei (x0-1,y0-1), die rechte untere *)
(* bei der absoluten Bildschirmposition (x0+dx+1,y0+dy+dw+2) gezeichnet     *)
(*--------------------------------------------------------------------------*)
        PROCEDURE  SetAktiv2 (bereich : Area);

(* Doppelfenster wird neu gezeichnet, das eigentliche Fenster  bereich wird *)
(* aktiv.                                                                   *)
(*--------------------------------------------------------------------------*)
        PROCEDURE  ResetAktiv2 (bereich : Area);

(* Doppelfenster wird nicht neu gezeichnet, das eigentliche Fenster         *)
(*  bereich wird aktiv.                                                     *)
(*--------------------------------------------------------------------------*)
        PROCEDURE  SetAktivt (bereich : Area);

(* der weitere Output geht in das Titelfenster von bereich; um auf das      *)
(* eigentliche Fenster zu wechseln, wird SetAktiv aus Area verwendet.       *)
(*--------------------------------------------------------------------------*)
        PROCEDURE  SetTemp2 (bereich : Area);

(* Rettet den absoluten Bildschirmbereich auf den Stack, bevor der neue     *)
(* Bereich angezeigt wird. Restaurieren durch EndTemp aus Area. Sonst wie   *)
(* SetAktiv2.                                                               *)
(*--------------------------------------------------------------------------*)
	PROCEDURE  GetAreaPar2 (bereich : Area;
	                        VAR x0, y0, dx, dy, dw : CARDINAL);

(* return die Parameter der Area  bereich                                   *)
(*--------------------------------------------------------------------------*)
        PROCEDURE  PositArea2 (VAR bereich : Area; x0, y0 : CARDINAL);

(* Fenster  nach x0, y0 verschieben                                         *)
(*--------------------------------------------------------------------------*)
        PROCEDURE  DimArea2 (VAR bereich : Area; dx, dy, dw : CARDINAL);

(* Fenstergroesse neu festlegen                                             *)
(*--------------------------------------------------------------------------*)
        PROCEDURE  ReturnArea2 (bereich : Area);

(* Speicherplatz von bereich zurueckgeben                                   *)
(*--------------------------------------------------------------------------*)
        PROCEDURE  ClearArea2;

(* beide Fenster loeschen                                                   *)

(*==========================================================================*)
(****   Prozeduren zur Titelverwaltung                                   ****)
(*==========================================================================*)
(*--------------------------------------------------------------------------*)
        PROCEDURE  WriteLnt;

(* Write Line im Titelfenster                                               *)
(*--------------------------------------------------------------------------*)
        PROCEDURE  WriteTitel (VAR s : ARRAY OF CHAR; space : INTEGER);

(* Write String im Titelfenster; Verwendung von space steht in areaio.def   *)
(*--------------------------------------------------------------------------*)

END  Area2.
