/*- * LstFindFrom.c -- * Find a node on a list from a given starting point. Used by Lst_Find. * * Copyright (c) 1988 by University of California Regents * * Permission to use, copy, modify, and distribute this * software and its documentation for any purpose and without * fee is hereby granted, provided that the above copyright * notice appears in all copies. Neither the University of California nor * Adam de Boor makes any representations about the suitability of this * software for any purpose. It is provided "as is" without * express or implied warranty. */ #ifndef lint static char *rcsid = "$Id: lstFindFrom.c,v 1.6 88/11/17 20:52:37 adam Exp $ SPRITE (Berkeley)"; #endif lint #include "lstInt.h" /*- *----------------------------------------------------------------------- * Lst_FindFrom -- * Search for a node starting and ending with the given one on the * given list using the passed datum and comparison function to * determine when it has been found. * * Results: * The found node or NILLNODE * * Side Effects: * None. * *----------------------------------------------------------------------- */ LstNode Lst_FindFrom (l, ln, d, cProc) Lst l; register LstNode ln; register ClientData d; register int (*cProc)(); { register ListNode tln; Boolean found = FALSE; if (!LstValid (l) || LstIsEmpty (l) || !LstNodeValid (ln, l)) { return (NILLNODE); } tln = (ListNode)ln; do { if ((*cProc) (tln->datum, d) == 0) { found = TRUE; break; } else { tln = tln->nextPtr; } } while (tln != (ListNode)ln && tln != NilListNode); if (found) { return ((LstNode)tln); } else { return (NILLNODE); } }