home *** CD-ROM | disk | FTP | other *** search
- /* LIST.C */
-
- /*+-------------------------------------------------------------------------+
- | |
- | ListDelete |
- | |
- +-------------------------------------------------------------------------+*/
- void ListDelete(Generic_Element_ptr elem,
- Generic_Element_list far *lst)
- BeginDeclarations
- #define Elem (*elem)
- #define Lst (*lst)
- Generic_Element_ptr current;
- #define Current (*current)
- Generic_Element_ptr prior;
- #define Prior (*prior)
- EndDeclarations
- BeginCode
- prior = Null;
- TraverseList(Lst, current)
- BeginTraverse
- If current Is elem
- Then
- If prior Is Null
- Then
- First(Lst) = Elem.next;
- If First(Lst) Is Null
- Then
- Last(Lst) = Null;
- EndIf;
- Else
- Prior.next = Elem.next;
- If Last(Lst) Is elem
- Then
- Last(Lst) = prior;
- EndIf;
- EndIf;
- ExitLoop;
- EndIf;
- prior = current;
- EndTraverse;
- return;
- EndCode
- #undef Elem
- #undef Lst
- #undef Current
- #undef Prior
-
- /*+-------------------------------------------------------------------------+
- | |
- | ListInsert |
- | |
- +-------------------------------------------------------------------------+*/
- void ListInsert(Generic_Element_ptr elem,
- bit_16 type_insert,
- Generic_Element_ptr aftr,
- Generic_Element_list far *lst)
- BeginDeclarations
- #define Elem (*elem)
- #define Aftr (*aftr)
- #define Lst (*lst)
- EndDeclarations
- BeginCode
- Using type_insert
- BeginCase
- /*+-------------------------------------------------------------------------+
- | |
- | Handle: Insert ptr After aftr InList lst EndInsert; |
- | |
- +-------------------------------------------------------------------------+*/
- When 0:
- Elem.next = Aftr.next;
- Aftr.next = elem;
- If Elem.next IsNull
- Then
- Last(Lst) = elem;
- EndIf;
- break;
- /*+-------------------------------------------------------------------------+
- | |
- | Handle: Insert ptr AtEnd InList lst EndInsert; |
- | |
- +-------------------------------------------------------------------------+*/
- When 1:
- If Last(Lst) IsNull
- Then
- First(Lst) = elem;
- Else
- (*Last(Lst)).next = elem;
- EndIf;
- Last(Lst) = elem;
- Elem.next = Null;
- break;
- /*+-------------------------------------------------------------------------+
- | |
- | Handle: Insert ptr AtBeginning InList lst EndInsert; |
- | |
- +-------------------------------------------------------------------------+*/
- When 2:
- Elem.next = First(Lst);
- First(Lst) = elem;
- If Last(Lst) IsNull
- Then
- Last(Lst) = elem;
- EndIf;
- break;
- EndCase;
- return;
- EndCode
- #undef Elem
- #undef Aftr
- #undef Lst
-
- /*+-------------------------------------------------------------------------+
- | |
- | ListPop |
- | |
- +-------------------------------------------------------------------------+*/
- void ListPop(Generic_Element_list far *lst,
- Generic_Element_ptr *elem)
- BeginDeclarations
- #define Elem (*elem)
- #define Lst (*lst)
- EndDeclarations
- BeginCode
- If First(Lst) IsNull
- Then
- Elem = Null;
- return;
- EndIf;
- Elem = First(Lst);
- First(Lst) = (*Elem).next;
- If First(Lst) IsNull
- Then
- Last(Lst) = Null;
- EndIf;
- return;
- EndCode
- #undef Elem
- #undef Lst
-