xref: /original-bsd/usr.bin/telnet/ring.h (revision 068cc2b8)
11e4bc969Sminshall /*
2bb8d19bbSbostic  * Copyright (c) 1988 Regents of the University of California.
3bb8d19bbSbostic  * All rights reserved.
4bb8d19bbSbostic  *
5*068cc2b8Sbostic  * %sccs.include.redist.c%
6bb8d19bbSbostic  *
7*068cc2b8Sbostic  *	@(#)ring.h	1.9 (Berkeley) 06/01/90
8bb8d19bbSbostic  */
9bb8d19bbSbostic 
10bb8d19bbSbostic /*
1158ab6e53Sminshall  * This defines a structure for a ring buffer.
121e4bc969Sminshall  *
1358ab6e53Sminshall  * The circular buffer has two parts:
141e4bc969Sminshall  *(((
1558ab6e53Sminshall  *	full:	[consume, supply)
1658ab6e53Sminshall  *	empty:	[supply, consume)
171e4bc969Sminshall  *]]]
181e4bc969Sminshall  *
191e4bc969Sminshall  */
201e4bc969Sminshall typedef struct {
2158ab6e53Sminshall     char	*consume,	/* where data comes out of */
2258ab6e53Sminshall     		*supply,	/* where data comes in to */
231e4bc969Sminshall 		*bottom,	/* lowest address in buffer */
24cc687d58Sminshall 		*top,		/* highest address+1 in buffer */
25cc687d58Sminshall 		*mark;		/* marker (user defined) */
261e4bc969Sminshall     int		size;		/* size in bytes of buffer */
2758ab6e53Sminshall     u_long	consumetime,	/* help us keep straight full, empty, etc. */
2858ab6e53Sminshall 		supplytime;
291e4bc969Sminshall } Ring;
301e4bc969Sminshall 
311e4bc969Sminshall /* Here are some functions and macros to deal with the ring buffer */
321e4bc969Sminshall 
331e4bc969Sminshall 
341e4bc969Sminshall #if	defined(LINT_ARGS)
351e4bc969Sminshall 
3601ec75b3Sminshall /* Initialization routine */
3701ec75b3Sminshall extern int
3801ec75b3Sminshall 	ring_init(Ring *ring, char *buffer, int count);
3901ec75b3Sminshall 
401e4bc969Sminshall /* Data movement routines */
411e4bc969Sminshall extern void
4258ab6e53Sminshall 	ring_supply_data(Ring *ring, char *buffer, int count),
4358ab6e53Sminshall 	ring_consume_data(Ring *ring, char *buffer, int count);
441e4bc969Sminshall 
451e4bc969Sminshall /* Buffer state transition routines */
461e4bc969Sminshall extern void
4758ab6e53Sminshall 	ring_supplied(Ring *ring, int count),
4858ab6e53Sminshall 	ring_consumed(Ring *ring, int count);
491e4bc969Sminshall 
501e4bc969Sminshall /* Buffer state query routines */
511e4bc969Sminshall extern int
521e4bc969Sminshall 	ring_empty_count(Ring *ring),
531e4bc969Sminshall 	ring_empty_consecutive(Ring *ring),
5458ab6e53Sminshall 	ring_full_count(Ring *ring),
5558ab6e53Sminshall 	ring_full_consecutive(Ring *ring);
561e4bc969Sminshall 
572686cc61Sminshall #else /* LINT_ARGS */
582686cc61Sminshall extern int
592686cc61Sminshall 	ring_init();
602686cc61Sminshall 
612686cc61Sminshall extern void
622686cc61Sminshall     ring_supply_data(),
632686cc61Sminshall     ring_consume_data();
642686cc61Sminshall 
652686cc61Sminshall extern void
662686cc61Sminshall     ring_supplied(),
672686cc61Sminshall     ring_consumed();
682686cc61Sminshall 
692686cc61Sminshall extern void
702686cc61Sminshall     ring_clear_mark(),
712686cc61Sminshall     ring_mark();
722686cc61Sminshall 
732686cc61Sminshall extern int
742686cc61Sminshall     ring_empty_count(),
752686cc61Sminshall     ring_empty_consecutive(),
762686cc61Sminshall     ring_full_count(),
772686cc61Sminshall     ring_full_consecutive();
781e4bc969Sminshall #endif	/* defined(LINT_ARGS) */
79