home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* SCRNSTCK.PAS *)
- (* ------------------------------------------------------ *)
- UNIT ScrnStck;
-
- INTERFACE
-
- TYPE
- Bildschirm = ARRAY[1..25, 1..80] OF RECORD
- CH : CHAR;
- Attr : BYTE
- END;
- ElTyp = Bildschirm;
- Zeiger = ^Stack;
- Stack = RECORD
- Z : ElTyp;
- next : Zeiger
- END;
- KELLER = Zeiger;
-
- VAR
- Screen : ^Bildschirm;
-
-
- FUNCTION IstLeer(K : KELLER) : BOOLEAN;
- (* Ist TRUE, wenn der Stack leer ist *)
-
- PROCEDURE POP(VAR K : KELLER; VAR x : ElTyp);
- (* Entfernt - falls möglich - das oberste Element vom
- Keller und gibt es in x zurück. *)
-
- PROCEDURE PUSH(VAR K : KELLER; x : ElTyp);
- (* Legt das Element x auf den Stack. *)
-
- PROCEDURE StackInit(VAR K : KELLER);
- (* Initialisiert einen neuen - oder rigoros
- einen alten Keller. *)
-
- PROCEDURE TOP(K : KELLER; VAR oben : ElTyp);
- (* Zeigt -- falls möglich -- das oberste Element und
- stellt es über den Variablenparameter zur Verfügung. *)
-
-
- IMPLEMENTATION
-
- FUNCTION IstLeer(K : KELLER) : BOOLEAN;
- BEGIN
- IstLeer := (K = NIL);
- END;
-
- PROCEDURE StackInit(VAR K : KELLER);
- BEGIN
- K := NIL;
- END;
-
- PROCEDURE TOP(K : KELLER; VAR oben : ElTyp);
- BEGIN
- IF NOT IstLeer(K) THEN oben := K^.Z
- END;
-
- PROCEDURE POP(VAR K : KELLER; VAR x : ElTyp);
- VAR
- Dummy : KELLER;
- BEGIN
- IF NOT IstLeer(K) THEN BEGIN
- x := K^.Z;
- Dummy := K;
- K := K^.next;
- DISPOSE(Dummy);
- END;
- END;
-
- PROCEDURE PUSH(VAR K : KELLER; x : ElTyp);
- VAR
- Dummy : KELLER;
- BEGIN
- NEW(Dummy);
- Dummy^.Z := x;
- Dummy^.next := K;
- K := Dummy
- END;
-
- END.
- (* ------------------------------------------------------ *)
- (* Ende von SCRNSTCK.PAS *)