1*40412Sbostic /* 2*40412Sbostic * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. 3*40412Sbostic * All rights reserved. 4*40412Sbostic * 5*40412Sbostic * This code is derived from software contributed to Berkeley by 6*40412Sbostic * Adam de Boor. 7*40412Sbostic * 8*40412Sbostic * Redistribution and use in source and binary forms are permitted 9*40412Sbostic * provided that the above copyright notice and this paragraph are 10*40412Sbostic * duplicated in all such forms and that any documentation, 11*40412Sbostic * advertising materials, and other materials related to such 12*40412Sbostic * distribution and use acknowledge that the software was developed 13*40412Sbostic * by the University of California, Berkeley. The name of the 14*40412Sbostic * University may not be used to endorse or promote products derived 15*40412Sbostic * from this software without specific prior written permission. 16*40412Sbostic * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 17*40412Sbostic * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 18*40412Sbostic * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 19*40412Sbostic */ 20*40412Sbostic 21*40412Sbostic #ifndef lint 22*40412Sbostic static char sccsid[] = "@(#)lstOpen.c 5.2 (Berkeley) 03/11/90"; 23*40412Sbostic #endif /* not lint */ 24*40412Sbostic 2540411Sbostic /*- 2640411Sbostic * LstOpen.c -- 2740411Sbostic * Open a list for sequential access. The sequential functions access the 2840411Sbostic * list in a slightly different way. CurPtr points to their idea of the 2940411Sbostic * current node in the list and they access the list based on it. 3040411Sbostic * If the list is circular, Lst_Next and Lst_Prev will go around 3140411Sbostic * the list forever. Lst_IsAtEnd must be used to determine when to stop. 3240411Sbostic */ 3340411Sbostic 3440411Sbostic #include "lstInt.h" 3540411Sbostic 3640411Sbostic /*- 3740411Sbostic *----------------------------------------------------------------------- 3840411Sbostic * Lst_Open -- 3940411Sbostic * Open a list for sequential access. A list can still be searched, 4040411Sbostic * etc., without confusing these functions. 4140411Sbostic * 4240411Sbostic * Results: 4340411Sbostic * SUCCESS or FAILURE. 4440411Sbostic * 4540411Sbostic * Side Effects: 4640411Sbostic * isOpen is set TRUE and curPtr is set to NilListNode so the 4740411Sbostic * other sequential functions no it was just opened and can choose 4840411Sbostic * the first element accessed based on this. 4940411Sbostic * 5040411Sbostic *----------------------------------------------------------------------- 5140411Sbostic */ 5240411Sbostic ReturnStatus 5340411Sbostic Lst_Open (l) 5440411Sbostic register Lst l; 5540411Sbostic { 5640411Sbostic if (LstValid (l) == FALSE) { 5740411Sbostic return (FAILURE); 5840411Sbostic } 5940411Sbostic ((List) l)->isOpen = TRUE; 6040411Sbostic ((List) l)->atEnd = LstIsEmpty (l) ? Head : Unknown; 6140411Sbostic ((List) l)->curPtr = NilListNode; 6240411Sbostic 6340411Sbostic return (SUCCESS); 6440411Sbostic } 6540411Sbostic 66