GENERIC IMPLEMENTATION MODULE GStack; PROCEDURE Init(VAR s : Stack); BEGIN s.top := NIL; s.depth := 0 END Init; PROCEDURE Push(VAR s : Stack; v : T); VAR n : Node; BEGIN NEW(n); n^.val := v; n^.next := s.top; s.top := n; s.depth := s.depth + 1 END Push; PROCEDURE Pop(VAR s : Stack; VAR v : T) : BOOLEAN; VAR n : Node; BEGIN IF s.top = NIL THEN RETURN FALSE END; n := s.top; v := n^.val; s.top := n^.next; s.depth := s.depth - 1; RETURN TRUE END Pop; PROCEDURE Depth(VAR s : Stack) : INTEGER; BEGIN RETURN s.depth END Depth; END GStack.