|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * This code is derived from software contributed to Berkeley by ! 6: * Adam de Boor. ! 7: * ! 8: * Redistribution and use in source and binary forms are permitted ! 9: * provided that: (1) source distributions retain this entire copyright ! 10: * notice and comment, and (2) distributions including binaries display ! 11: * the following acknowledgement: ``This product includes software ! 12: * developed by the University of California, Berkeley and its contributors'' ! 13: * in the documentation or other materials provided with the distribution ! 14: * and in all advertising materials mentioning features or use of this ! 15: * software. Neither the name of the University nor the names of its ! 16: * contributors may be used to endorse or promote products derived ! 17: * from this software without specific prior written permission. ! 18: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR ! 19: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED ! 20: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 21: */ ! 22: ! 23: #ifndef lint ! 24: static char sccsid[] = "@(#)lstFindFrom.c 5.3 (Berkeley) 6/1/90"; ! 25: #endif /* not lint */ ! 26: ! 27: /*- ! 28: * LstFindFrom.c -- ! 29: * Find a node on a list from a given starting point. Used by Lst_Find. ! 30: */ ! 31: ! 32: #include "lstInt.h" ! 33: ! 34: /*- ! 35: *----------------------------------------------------------------------- ! 36: * Lst_FindFrom -- ! 37: * Search for a node starting and ending with the given one on the ! 38: * given list using the passed datum and comparison function to ! 39: * determine when it has been found. ! 40: * ! 41: * Results: ! 42: * The found node or NILLNODE ! 43: * ! 44: * Side Effects: ! 45: * None. ! 46: * ! 47: *----------------------------------------------------------------------- ! 48: */ ! 49: LstNode ! 50: Lst_FindFrom (l, ln, d, cProc) ! 51: Lst l; ! 52: register LstNode ln; ! 53: register ClientData d; ! 54: register int (*cProc)(); ! 55: { ! 56: register ListNode tln; ! 57: Boolean found = FALSE; ! 58: ! 59: if (!LstValid (l) || LstIsEmpty (l) || !LstNodeValid (ln, l)) { ! 60: return (NILLNODE); ! 61: } ! 62: ! 63: tln = (ListNode)ln; ! 64: ! 65: do { ! 66: if ((*cProc) (tln->datum, d) == 0) { ! 67: found = TRUE; ! 68: break; ! 69: } else { ! 70: tln = tln->nextPtr; ! 71: } ! 72: } while (tln != (ListNode)ln && tln != NilListNode); ! 73: ! 74: if (found) { ! 75: return ((LstNode)tln); ! 76: } else { ! 77: return (NILLNODE); ! 78: } ! 79: } ! 80:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.