/*
 * gf.h
 *
 * Read directories in a buffered way
 *
 *  1998 Straylight/Edgeware
 */

/*----- Licensing note ----------------------------------------------------*
 *
 * This file is part of Straylight's core utilities (coreutils).
 *
 * Coreutils is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2, or (at your option)
 * any later version.
 *
 * Coreutils is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with coreutils.  If not, write to the Free Software Foundation,
 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 */

#ifndef GF_H
#define GF_H

#ifdef __cplusplus
  extern "C" {
#endif

/*----- Type definitions --------------------------------------------------*/

/* --- Wildcard matcher context --- */

typedef struct gf_ctx {
  char buf[1024];			/* Buffer for OS_HeebieJeebie */
  int ctx;				/* Context for OS_HeebieJeebie */
  const char *dir;			/* Pointer to directory to scan */
  const char *pat;			/* Pointer to pattern string */
  int nleft;				/* Number left in buffer */
  char *p;				/* Pointer into the buffer */
} gf_ctx;

/*----- Functions ---------------------------------------------------------*/

/* --- @gf_init@ --- *
 *
 * Arguments:	@gf_ctx *g@ = pointer to a context buffer for me
 *		@const char *pat@ = pointer to a (RISC OS) pattern string
 *		@cost char *dir@ = pointer to name of parent directory
 *
 * Returns:	---
 *
 * Use:		Initialise a wildcard match context ready for scanning.
 */

extern void gf_init(gf_ctx */*g*/, const char */*pat*/, const char */*dir*/);

/* --- @gf_next@ --- *
 *
 * Arguments:	@gf_ctx *g@ = pointer to my context
 *
 * Returns:	Pointer to a filename, or zero for end
 *
 * Use:		Returns the next matching file from the block.
 */

extern char *gf_next(gf_ctx */*g*/);

/*----- That's all, folks -------------------------------------------------*/

#ifdef __cplusplus
  }
#endif

#endif
