home *** CD-ROM | disk | FTP | other *** search
Modula Implementation | 1993-11-04 | 2.3 KB | 78 lines |
- (*********************************************************************
- * *
- * :Program. Stack.mod *
- * :Author. Michael Frieß *
- * :Address. Kernerstr. 22a *
- * :shortcut. [MiF] *
- * :Version. 1.0 *
- * :Date. 15.09.88 *
- * :Copyright. PD *
- * :Language. Modula-II *
- * :Translator. M2Amiga *
- * :Imports. MemSystem (at least V1.0 --> Amok#5) *
- * :Contents. Generic data type: Stack *
- * *
- *********************************************************************)
-
- IMPLEMENTATION MODULE Stack;
- (* MODULE Stack: (C) Copyright 1988 by Michael Frieß *)
-
- FROM SYSTEM IMPORT BYTE, ADR, ADDRESS;
- FROM MemSystem IMPORT Allocate, Deallocate;
- FROM Exec IMPORT CopyMem;
-
- CONST copyright = "MODULE Stack: (C) Copyright 1988 by Michael Frieß";
-
- TYPE stack = POINTER TO element;
- element = RECORD
- Data : ADDRESS;
- Next : stack;
- END;
-
- PROCEDURE Init (VAR s:stack);
- BEGIN
- s := NIL;
- END Init;
-
- PROCEDURE Write (VAR s:stack; Data : ARRAY OF BYTE);
- VAR p : stack;
- BEGIN
- p := s;
- Allocate (s, SIZE(element));
- IF s = NIL THEN HALT END;
- s^.Next := p;
- Allocate (s^.Data, HIGH(Data)+1);
- IF s^.Data = NIL THEN HALT END;
- CopyMem (ADR(Data), s^.Data, HIGH(Data)+1);
- END Write;
-
- PROCEDURE Read (VAR s:stack; VAR Data : ARRAY OF BYTE);
- VAR p : stack;
- BEGIN
- IF s # NIL THEN
- CopyMem (s^.Data, ADR(Data), HIGH(Data)+1);
- p := s^.Next;
- Deallocate (s^.Data);
- Deallocate (s);
- s := p
- END
- END Read;
-
- PROCEDURE Empty (s:stack) : BOOLEAN;
- BEGIN
- RETURN (s = NIL)
- END Empty;
-
- PROCEDURE Discard (VAR s:stack);
- VAR p : stack;
- BEGIN
- WHILE s # NIL DO
- p := s^.Next;
- Deallocate (s^.Data);
- Deallocate (s);
- s := p
- END;
- END Discard;
-
- END Stack.
-