|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T l
Length: 4460 (0x116c) Types: TextFile Names: »list.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─⟦526ad3590⟧ »EUUGD11/gnu-31mar87/X.V10.R4.tar.Z« └─⟦2109abc41⟧ └─⟦this⟧ »./X.V10R4/Toolkit/Sx/code/list.c«
/* * $Source: /u1/Sx.new/code/RCS/list.c,v $ * $Header: list.c,v 1.1 86/12/03 16:09:17 swick Exp $ */ #ifndef lint static char *rcsid_list_c = "$Header: list.c,v 1.1 86/12/03 16:09:17 swick Exp $"; #endif lint /* list.c - * * This file contains procedures for manipulating lists. * Structures may be inserted into or deleted from lists, and * they may be moved from one place in a list to another. * * The header file contains macros to help in determining the destination * locations for List_Insert and List_Move. See list.h for details. * * Copyright (C) 1985 Regents of the University of California * All rights reserved. */ #ifndef lint static char rcsid[] = "$Header: list.c,v 1.1 86/12/03 16:09:17 swick Exp $ SPRITE (Berkeley)"; #endif not lint #include "sprite.h" #include "list.h" \f /* * ---------------------------------------------------------------------------- * * List_Insert -- * * Insert the list element pointed to by itemPtr into a List after * destPtr. * * Results: * If neither List_Links structure is NIL, they are assumed to be valid * and SUCCESS is returned. If either one is NIL then FAILURE is * returned. * * Side effects: * The list containing destPtr is modified to contain itemPtr. * * ---------------------------------------------------------------------------- */ ReturnStatus List_Insert(itemPtr, destPtr) register List_Links *itemPtr; /* structure to insert */ register List_Links *destPtr; /* structure after which to insert it */ { if (itemPtr == (List_Links *) NIL || destPtr == (List_Links *) NIL || !itemPtr || !destPtr) { return(FAILURE); } itemPtr->nextPtr = destPtr->nextPtr; itemPtr->prevPtr = destPtr; destPtr->nextPtr->prevPtr = itemPtr; destPtr->nextPtr = itemPtr; return(SUCCESS); } \f /* * ---------------------------------------------------------------------------- * * List_Remove -- * * Remove a list element from the list in which it is contained. * * Results: * If the list element is invalid or is the list header, FAILURE is * returned. Otherwise SUCCESS is returned. * * Side effects: * The given structure is removed from its containing list. * * ---------------------------------------------------------------------------- */ ReturnStatus List_Remove(itemPtr) register List_Links *itemPtr; /* list element to remove */ { if (itemPtr == (List_Links *) NIL || itemPtr == itemPtr->nextPtr || !itemPtr) { return(FAILURE); } itemPtr->prevPtr->nextPtr = itemPtr->nextPtr; itemPtr->nextPtr->prevPtr = itemPtr->prevPtr; return(SUCCESS); } \f /* * ---------------------------------------------------------------------------- * * List_Move -- * * Move the list element referenced by itemPtr to follow destPtr. * * Results: * If either list element is invalid, FAILURE is returned. * Otherwise SUCCESS is returned. * * Side effects: * List ordering is modified. * * ---------------------------------------------------------------------------- */ ReturnStatus List_Move(itemPtr, destPtr) register List_Links *itemPtr; /* list element to be moved */ register List_Links *destPtr; /* element after which it is to be placed */ { ReturnStatus status; if (itemPtr == (List_Links *) NIL || destPtr == (List_Links *) NIL || !itemPtr || !destPtr) { return(FAILURE); } /* * It is conceivable that someone will try to move a list element to * be after itself. */ if (itemPtr != destPtr) { status = List_Remove(itemPtr); if (status != SUCCESS) { return(status); } status = List_Insert(itemPtr, destPtr); if (status != SUCCESS) { return(status); } } return(SUCCESS); } \f /* * ---------------------------------------------------------------------------- * * List_Init -- * * Initialize a header pointer to point to an empty list. The List_Links * structure must already be allocated. * * Results: * No value is returned. * * Side effects: * The header's pointers are modified to point to itself. * * ---------------------------------------------------------------------------- */ ReturnStatus List_Init(headerPtr) register List_Links *headerPtr; /* Pointer to a List_Links structure to be header */ { if (headerPtr == (List_Links *) NIL || !headerPtr) { return(FAILURE); } headerPtr->nextPtr = headerPtr; headerPtr->prevPtr = headerPtr; return(SUCCESS); }