home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1991 / 05 / tricks / scrnstck.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1991-02-05  |  2.0 KB  |  85 lines

  1. (* ------------------------------------------------------ *)
  2. (*                     SCRNSTCK.PAS                       *)
  3. (* ------------------------------------------------------ *)
  4. UNIT ScrnStck;
  5.  
  6. INTERFACE
  7.  
  8. TYPE
  9.   Bildschirm = ARRAY[1..25, 1..80] OF RECORD
  10.                                         CH   : CHAR;
  11.                                         Attr : BYTE
  12.                                       END;
  13.   ElTyp      = Bildschirm;
  14.   Zeiger     = ^Stack;
  15.   Stack      = RECORD
  16.                  Z    : ElTyp;
  17.                  next : Zeiger
  18.                END;
  19.   KELLER     = Zeiger;
  20.  
  21. VAR
  22.   Screen     : ^Bildschirm;
  23.  
  24.  
  25.   FUNCTION IstLeer(K : KELLER) : BOOLEAN;
  26.     (* Ist TRUE, wenn der Stack leer ist *)
  27.  
  28.   PROCEDURE POP(VAR K : KELLER; VAR x : ElTyp);
  29.   (* Entfernt - falls möglich - das oberste Element vom
  30.      Keller und gibt es in x zurück.                    *)
  31.  
  32.   PROCEDURE PUSH(VAR K : KELLER; x : ElTyp);
  33.     (* Legt das Element x auf den Stack. *)
  34.  
  35.   PROCEDURE StackInit(VAR K : KELLER);
  36.     (* Initialisiert einen neuen - oder rigoros
  37.        einen alten Keller. *)
  38.  
  39.   PROCEDURE TOP(K : KELLER; VAR oben : ElTyp);
  40.   (* Zeigt -- falls möglich -- das oberste Element und
  41.      stellt es über den Variablenparameter zur Verfügung. *)
  42.  
  43.  
  44. IMPLEMENTATION
  45.  
  46.   FUNCTION IstLeer(K : KELLER) : BOOLEAN;
  47.   BEGIN
  48.     IstLeer := (K = NIL);
  49.   END;
  50.  
  51.   PROCEDURE StackInit(VAR K : KELLER);
  52.   BEGIN
  53.     K := NIL;
  54.   END;
  55.  
  56.   PROCEDURE TOP(K : KELLER; VAR oben : ElTyp);
  57.   BEGIN
  58.     IF NOT IstLeer(K) THEN oben := K^.Z
  59.   END;
  60.  
  61.   PROCEDURE POP(VAR K : KELLER; VAR x : ElTyp);
  62.   VAR
  63.     Dummy : KELLER;
  64.   BEGIN
  65.     IF NOT IstLeer(K) THEN BEGIN
  66.       x := K^.Z;
  67.       Dummy := K;
  68.       K := K^.next;
  69.       DISPOSE(Dummy);
  70.     END;
  71.   END;
  72.  
  73.   PROCEDURE PUSH(VAR K : KELLER; x : ElTyp);
  74.   VAR
  75.     Dummy : KELLER;
  76.   BEGIN
  77.     NEW(Dummy);
  78.     Dummy^.Z := x;
  79.     Dummy^.next := K;
  80.     K := Dummy
  81.   END;
  82.  
  83. END.
  84. (* ------------------------------------------------------ *)
  85. (*              Ende von SCRNSTCK.PAS                     *)