DEFINITION MODULE DynMat;

  (*------------------------------------------------------------------------*)
  (* Modul zur Verwaltung von dynamisch allokierten zweidimensionalen       *)
  (* Matrizen wie sie in Deklera definiert wurden.                          *)
  (* Modul for handling dynamicly allocated two dimensional matrices as     *)
  (* defined in Deklera.def.                                                *)
  (*------------------------------------------------------------------------*)
  (* Implementation : Michael Riedl                                         *)
  (* Licence        : GNU Lesser General Public License (LGPL)              *)
  (*------------------------------------------------------------------------*)

  (* $Id: DynMat.def,v 1.2 2017/01/02 08:36:11 mriedl Exp mriedl $ *)

FROM SYSTEM   IMPORT TSIZE;
FROM Deklera  IMPORT MATRIX,PMATRIX;

PROCEDURE AllocMat(VAR Mat : PMATRIX;
                       m,n : CARDINAL);

          (*----------------------------------------------------------------*)
          (* Erzeugt eine dynamische Matrix Mat[1..m,1..n]. Wenn nicht      *)
          (* gen"ugend Freispeicher vorhanden ist, wird Mat auf NIL gesetzt *)
          (* Errros.Fehler auf TRUE und in Errros.Fehler eine entsprechende *)
          (* Fehlermeldung generiert. Diese wird auf dem Fehlerkanal aus-   *)
          (* gegeben wird, ohne jedoch das Programm abzubrechen.            *)
          (*----------------------------------------------------------------*)

PROCEDURE DeAllocMat(VAR Mat : PMATRIX;
                         m,n : CARDINAL);

          (*----------------------------------------------------------------*)
          (* Gibt den Speicherplatz der dynamischen Matrix Mat wieder       *)
          (* frei und setzt Mat auf NIL.                                    *)
          (*----------------------------------------------------------------*)

PROCEDURE ConvMat(VAR Mat  : MATRIX;
                  VAR PMat : PMATRIX);   (* ==> Referenz auf Mat *)

          (*----------------------------------------------------------------*)
          (* Erzeugt eine Reverenz auf eine statische Matrix                *)
          (* Die Dimension dieser Referenz entspricht dann                  *)
          (* [1..Deklera.MaxDim, 1..Deklera.MaxDim].                        *)
          (* Diese Referenz darf NICHT mit DeAllocMat wieder freigegeben    *)
          (* werden, dann ist das absolute Chaos garantiert. Zu diesem      *)
          (* Zweck ist die Routine DeAllocConvMat gedacht.                  *)
          (*----------------------------------------------------------------*)

PROCEDURE DeAllocConvMat(VAR Mat  : MATRIX;
                         VAR PMat : PMATRIX);   (* <==> Referenz auf Mat *)

          (*----------------------------------------------------------------*)
          (* L"oscht die Reverenz PMat auf die statische Matrix Mat.        *)
          (* Wenn PMat NICHT auf Mat verwei3t, wird Errros.Fehler und       *)
          (* Errros.Fehlerflag entsprechend gesetzt und KEINE               *)
          (* Speicherfreigabe ausgef"uhrt.                                  *)
          (*----------------------------------------------------------------*)

END DynMat.
