(**********************************************************************

    :Program.  	 SuperLists.def
    :Contents.	 Text-list Playfield handler
    :Author.   	 Nicolas Benezan [bne]
    :Address.    Postwiesenstr. 2, D7000 Stuttgart 60
    :Phone.      711/333679
    :Copyright.  Public Domain (siehe ReadMe)
    :Language. 	 Modula-II
    :Translator. M2Amiga AMSoft
    :ModHistory. V1.0b [bne] 28.05.88 (first PD-version Amok#1)
    :ModHistory. V1.1a [bne] 10.06.88 (extended MemHandler)
    :Remark.	 + VAR AllocProc, DeallocProc
    :ModHistory. V1.2b [bne] 20.07.88 ("FreeVert-only" also available)
    :Remark.	 + CONST first, last
    
**********************************************************************)

DEFINITION MODULE SuperLists;

FROM Exec	IMPORT Node,List,NodePtr,Byte;
FROM Intuition	IMPORT GadgetPtr,WindowPtr,RequesterPtr;
FROM Graphics	IMPORT DrawModeSet,RastPortPtr;
FROM SYSTEM	IMPORT ADDRESS,BITSET;

CONST	oldList=FALSE;	(* RethinkList *)
	newList=TRUE;
        
        hideIt=TRUE;	(* InsertEntry, RemoveEntry *)
        showIt=FALSE;
        
        deallocIt=TRUE;	(* RemoveEntry *)
        letIt=FALSE;
        
        first=0;	(* InsertEntry, RemoveEntry *)
        last=-1;

TYPE	SuperListPtr=POINTER TO SuperList;
        EntryPtr=POINTER TO Entry;
	SuperList=RECORD
	  list		:List;
          rastPort	:RastPortPtr;
          backPen	:INTEGER;
          propX,
          propY		:GadgetPtr;
          leftEdge,
          topEdge,
          width,
          height,
          FontXsize,
          FontYsize,
          FontBaseLine,
          dispRow,
          dispColumn,
          rows,
          columns	:INTEGER;
          topEntry,
          bottomEntry	:NodePtr;
          effWidth,
          effHeight	:INTEGER;
        END;
        Entry=RECORD
          node		:Node;
          frontPen,
          backPen	:Byte;
          drawMode	:DrawModeSet;
          userFlags	:BITSET;
          userData	:LONGINT;
        END;
        Directions=(Up,Down,Left,Right);
        AllocProcType=PROCEDURE(VAR ADDRESS,LONGINT);
        DeallocProcType=PROCEDURE(VAR ADDRESS);

VAR	AllocProc:AllocProcType;
	DeallocProc:DeallocProcType;

PROCEDURE RethinkList(List:SuperListPtr;New:BOOLEAN);

PROCEDURE RefreshList(List:SuperListPtr);

PROCEDURE RedrawEntry(List:SuperListPtr;Row:INTEGER);

PROCEDURE ScrollList(List:SuperListPtr;Dir:Directions);

PROCEDURE MakeEntry(text:ADDRESS;APen,BPen:INTEGER;
	Mode:DrawModeSet):EntryPtr;

PROCEDURE InsertEntry(List:SuperListPtr;entry:EntryPtr;Row:INTEGER;
	hidden:BOOLEAN);

PROCEDURE RemoveEntry(List:SuperListPtr;Row:INTEGER;VAR mustRethink:
	BOOLEAN;hidden,Dealloc:BOOLEAN);

PROCEDURE GetEntry(List:SuperListPtr;Row:INTEGER):EntryPtr;

PROCEDURE ClickRow(List:SuperListPtr;mouseX,mouseY:INTEGER):INTEGER;

PROCEDURE GetProp(List:SuperListPtr);

PROCEDURE SetProp(List:SuperListPtr;Window:WindowPtr;Requester:
	RequesterPtr);

END SuperLists.
          



