1 /* 2 * Copyright (c) 1988, 1989, 1990, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Adam de Boor. 7 * 8 * %sccs.include.redist.c% 9 */ 10 11 #ifndef lint 12 static char sccsid[] = "@(#)lstFindFrom.c 8.1 (Berkeley) 06/06/93"; 13 #endif /* not lint */ 14 15 /*- 16 * LstFindFrom.c -- 17 * Find a node on a list from a given starting point. Used by Lst_Find. 18 */ 19 20 #include "lstInt.h" 21 22 /*- 23 *----------------------------------------------------------------------- 24 * Lst_FindFrom -- 25 * Search for a node starting and ending with the given one on the 26 * given list using the passed datum and comparison function to 27 * determine when it has been found. 28 * 29 * Results: 30 * The found node or NILLNODE 31 * 32 * Side Effects: 33 * None. 34 * 35 *----------------------------------------------------------------------- 36 */ 37 LstNode 38 Lst_FindFrom (l, ln, d, cProc) 39 Lst l; 40 register LstNode ln; 41 register ClientData d; 42 register int (*cProc)(); 43 { 44 register ListNode tln; 45 Boolean found = FALSE; 46 47 if (!LstValid (l) || LstIsEmpty (l) || !LstNodeValid (ln, l)) { 48 return (NILLNODE); 49 } 50 51 tln = (ListNode)ln; 52 53 do { 54 if ((*cProc) (tln->datum, d) == 0) { 55 found = TRUE; 56 break; 57 } else { 58 tln = tln->nextPtr; 59 } 60 } while (tln != (ListNode)ln && tln != NilListNode); 61 62 if (found) { 63 return ((LstNode)tln); 64 } else { 65 return (NILLNODE); 66 } 67 } 68 69