xref: /original-bsd/usr.bin/telnet/ring.h (revision 1a56dd2c)
1 /*
2  * Copyright (c) 1988 Regents of the University of California.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms are permitted
6  * provided that this notice is preserved and that due credit is given
7  * to the University of California at Berkeley. The name of the University
8  * may not be used to endorse or promote products derived from this
9  * software without specific prior written permission. This software
10  * is provided ``as is'' without express or implied warranty.
11  *
12  *	@(#)ring.h	1.6 (Berkeley) 03/08/88
13  */
14 
15 /*
16  * This defines a structure for a ring buffer.
17  *
18  * The circular buffer has two parts:
19  *(((
20  *	full:	[consume, supply)
21  *	empty:	[supply, consume)
22  *]]]
23  *
24  */
25 typedef struct {
26     char	*consume,	/* where data comes out of */
27     		*supply,	/* where data comes in to */
28 		*bottom,	/* lowest address in buffer */
29 		*top,		/* highest address+1 in buffer */
30 		*mark;		/* marker (user defined) */
31     int		size;		/* size in bytes of buffer */
32     u_long	consumetime,	/* help us keep straight full, empty, etc. */
33 		supplytime;
34 } Ring;
35 
36 /* Here are some functions and macros to deal with the ring buffer */
37 
38 
39 #if	defined(LINT_ARGS)
40 
41 /* Initialization routine */
42 extern int
43 	ring_init(Ring *ring, char *buffer, int count);
44 
45 /* Data movement routines */
46 extern void
47 	ring_supply_data(Ring *ring, char *buffer, int count),
48 	ring_consume_data(Ring *ring, char *buffer, int count);
49 
50 /* Buffer state transition routines */
51 extern void
52 	ring_supplied(Ring *ring, int count),
53 	ring_consumed(Ring *ring, int count);
54 
55 /* Buffer state query routines */
56 extern int
57 	ring_empty_count(Ring *ring),
58 	ring_empty_consecutive(Ring *ring),
59 	ring_full_count(Ring *ring),
60 	ring_full_consecutive(Ring *ring);
61 
62 #endif	/* defined(LINT_ARGS) */
63