GENERIC DEFINITION MODULE DList (T : TYPE); TYPE Node = POINTER TO NodeRec; NodeRec = RECORD val : T; prev, next : Node; END; List = RECORD head, tail : Node; count : INTEGER; END; PROCEDURE Init(VAR l : List); PROCEDURE Append(VAR l : List; v : T); PROCEDURE Prepend(VAR l : List; v : T); PROCEDURE Count(VAR l : List) : INTEGER; PROCEDURE Get(VAR l : List; i : INTEGER) : T; PROCEDURE First(VAR l : List) : T; PROCEDURE Last(VAR l : List) : T; PROCEDURE Reverse(VAR l : List); END DList.