1/* seq.c - This is the sequential visit of the database. This defines two 2 user-visable routines that are used together. This is the DBM interface. */ 3 4/* This file is part of GDBM, the GNU data base manager, by Philip A. Nelson. 5 Copyright (C) 1990, 1991, 1993 Free Software Foundation, Inc. 6 7 GDBM is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation; either version 2, or (at your option) 10 any later version. 11 12 GDBM is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with GDBM; see the file COPYING. If not, write to 19 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 20 21 You may contact the author by: 22 e-mail: phil@cs.wwu.edu 23 us-mail: Philip A. Nelson 24 Computer Science Department 25 Western Washington University 26 Bellingham, WA 98226 27 28*************************************************************************/ 29 30 31/* include system configuration before all else. */ 32#include "autoconf.h" 33 34#include "gdbmdefs.h" 35#include "extern.h" 36 37/* Start the visit of all keys in the database. This produces something in 38 hash order, not in any sorted order. */ 39 40datum 41firstkey () 42{ 43 datum ret_val; 44 45 /* Free previous dynamic memory, do actual call, and save pointer to new 46 memory. */ 47 ret_val = gdbm_firstkey (_gdbm_file); 48 if (_gdbm_memory.dptr != NULL) free (_gdbm_memory.dptr); 49 _gdbm_memory = ret_val; 50 51 /* Return the new value. */ 52 return ret_val; 53} 54 55 56/* Continue visiting all keys. The next key following KEY is returned. */ 57 58datum 59nextkey (key) 60 datum key; 61{ 62 datum ret_val; 63 64 /* Make sure we have a valid key. */ 65 if (key.dptr == NULL) 66 return key; 67 68 /* Call gdbm nextkey with supplied value. After that, free the old value. */ 69 ret_val = gdbm_nextkey (_gdbm_file, key); 70 if (_gdbm_memory.dptr != NULL) free (_gdbm_memory.dptr); 71 _gdbm_memory = ret_val; 72 73 /* Return the new value. */ 74 return ret_val; 75} 76