Annotation of 43BSDReno/usr.bin/make/list.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
                      3:  * Copyright (c) 1988, 1989 by Adam de Boor
                      4:  * Copyright (c) 1989 by Berkeley Softworks
                      5:  * All rights reserved.
                      6:  *
                      7:  * This code is derived from software contributed to Berkeley by
                      8:  * Adam de Boor.
                      9:  *
                     10:  * Redistribution and use in source and binary forms are permitted
                     11:  * provided that: (1) source distributions retain this entire copyright
                     12:  * notice and comment, and (2) distributions including binaries display
                     13:  * the following acknowledgement:  ``This product includes software
                     14:  * developed by the University of California, Berkeley and its contributors''
                     15:  * in the documentation or other materials provided with the distribution
                     16:  * and in all advertising materials mentioning features or use of this
                     17:  * software. Neither the name of the University nor the names of its
                     18:  * contributors may be used to endorse or promote products derived
                     19:  * from this software without specific prior written permission.
                     20:  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
                     21:  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
                     22:  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
                     23:  */
                     24: 
                     25: #ifndef lint
                     26: static char sccsid[] = "@(#)list.c     5.4 (Berkeley) 6/1/90";
                     27: #endif /* not lint */
                     28: 
                     29: /* list.c -
                     30:  *
                     31:  * This file contains procedures for manipulating lists.
                     32:  * Structures may be inserted into or deleted from lists, and
                     33:  * they may be moved from one place in a list to another.
                     34:  *
                     35:  * The header file contains macros to help in determining the destination
                     36:  * locations for List_Insert and List_Move.  See list.h for details.
                     37:  */
                     38: 
                     39: #include "sprite.h"
                     40: #include "list.h"
                     41: 
                     42: 
                     43: /*
                     44:  * ----------------------------------------------------------------------------
                     45:  *
                     46:  * List_Insert --
                     47:  *
                     48:  *     Insert the list element pointed to by itemPtr into a List after 
                     49:  *     destPtr.  Perform a primitive test for self-looping by returning
                     50:  *     failure if the list element is being inserted next to itself.
                     51:  *
                     52:  * Results:
                     53:  *     None.
                     54:  *
                     55:  * Side effects:
                     56:  *     The list containing destPtr is modified to contain itemPtr.
                     57:  *
                     58:  * ----------------------------------------------------------------------------
                     59:  */
                     60: void
                     61: List_Insert(itemPtr, destPtr)
                     62:     register   List_Links *itemPtr;    /* structure to insert */
                     63:     register   List_Links *destPtr;    /* structure after which to insert it */
                     64: {
                     65:     if (itemPtr == (List_Links *) NIL || destPtr == (List_Links *) NIL
                     66:            || !itemPtr || !destPtr || (itemPtr == destPtr)) {
                     67:        Punt("List_Insert: inserting this item would create a loop.\n");
                     68:        return;
                     69:     }
                     70:     itemPtr->nextPtr = destPtr->nextPtr;
                     71:     itemPtr->prevPtr = destPtr;
                     72:     destPtr->nextPtr->prevPtr = itemPtr;
                     73:     destPtr->nextPtr = itemPtr;
                     74: }
                     75: 
                     76: 
                     77: /*
                     78:  * ----------------------------------------------------------------------------
                     79:  *
                     80:  * List_Remove --
                     81:  *
                     82:  *     Remove a list element from the list in which it is contained.
                     83:  *
                     84:  * Results:
                     85:  *     None.
                     86:  *
                     87:  * Side effects:
                     88:  *     The given structure is removed from its containing list.
                     89:  *
                     90:  * ----------------------------------------------------------------------------
                     91:  */
                     92: void
                     93: List_Remove(itemPtr)
                     94:     register   List_Links *itemPtr;    /* list element to remove */
                     95: {
                     96:     if (itemPtr == (List_Links *) NIL || itemPtr == itemPtr->nextPtr
                     97:            || !itemPtr) {
                     98:        Punt("List_Remove: invalid item to remove.\n");
                     99:     }
                    100:     itemPtr->prevPtr->nextPtr = itemPtr->nextPtr;
                    101:     itemPtr->nextPtr->prevPtr = itemPtr->prevPtr;
                    102: }
                    103: 
                    104: 
                    105: /*
                    106:  * ----------------------------------------------------------------------------
                    107:  *
                    108:  * List_Move --
                    109:  *
                    110:  *     Move the list element referenced by itemPtr to follow destPtr.
                    111:  *
                    112:  * Results:
                    113:  *     None.
                    114:  *
                    115:  * Side effects:
                    116:  *     List ordering is modified.
                    117:  *
                    118:  * ----------------------------------------------------------------------------
                    119:  */
                    120: void
                    121: List_Move(itemPtr, destPtr)
                    122:     register List_Links *itemPtr; /* list element to be moved */
                    123:     register List_Links *destPtr; /* element after which it is to be placed */
                    124: {
                    125: 
                    126:     if (itemPtr == (List_Links *) NIL || destPtr == (List_Links *) NIL
                    127:            || !itemPtr || !destPtr) {
                    128:        Punt("List_Move: One of the list items is NIL.\n");
                    129:     }
                    130:     /*
                    131:      * It is conceivable that someone will try to move a list element to
                    132:      * be after itself.
                    133:      */
                    134:     if (itemPtr != destPtr) {
                    135:        List_Remove(itemPtr);
                    136:        List_Insert(itemPtr, destPtr);
                    137:     }    
                    138: }
                    139: 
                    140: 
                    141: /*
                    142:  * ----------------------------------------------------------------------------
                    143:  *
                    144:  * List_Init --
                    145:  *
                    146:  *     Initialize a header pointer to point to an empty list.  The List_Links
                    147:  *     structure must already be allocated.
                    148:  *
                    149:  * Results:
                    150:  *     None.
                    151:  *
                    152:  * Side effects:
                    153:  *     The header's pointers are modified to point to itself.
                    154:  *
                    155:  * ----------------------------------------------------------------------------
                    156:  */
                    157: void
                    158: List_Init(headerPtr)
                    159:     register List_Links *headerPtr;  /* Pointer to a List_Links structure 
                    160:                                        to be header */
                    161: {
                    162:     if (headerPtr == (List_Links *) NIL || !headerPtr) {
                    163:        Punt("List_Init: invalid header pointer.\n");
                    164:     }
                    165:     headerPtr->nextPtr = headerPtr;
                    166:     headerPtr->prevPtr = headerPtr;
                    167: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.