xref: /original-bsd/usr.bin/telnet/ring.h (revision c9590d16)
11e4bc969Sminshall /*
2*c9590d16Sbostic  * Copyright (c) 1988, 1993
3*c9590d16Sbostic  *	The Regents of the University of California.  All rights reserved.
4bb8d19bbSbostic  *
5068cc2b8Sbostic  * %sccs.include.redist.c%
6bb8d19bbSbostic  *
7*c9590d16Sbostic  *	@(#)ring.h	8.1 (Berkeley) 06/06/93
8bb8d19bbSbostic  */
9bb8d19bbSbostic 
102cd0b9fbSdab #if defined(P)
112cd0b9fbSdab # undef P
122cd0b9fbSdab #endif
132cd0b9fbSdab 
142cd0b9fbSdab #if defined(__STDC__) || defined(LINT_ARGS)
152cd0b9fbSdab # define	P(x)	x
162cd0b9fbSdab #else
172cd0b9fbSdab # define	P(x)	()
182cd0b9fbSdab #endif
192cd0b9fbSdab 
20bb8d19bbSbostic /*
2158ab6e53Sminshall  * This defines a structure for a ring buffer.
221e4bc969Sminshall  *
2358ab6e53Sminshall  * The circular buffer has two parts:
241e4bc969Sminshall  *(((
2558ab6e53Sminshall  *	full:	[consume, supply)
2658ab6e53Sminshall  *	empty:	[supply, consume)
271e4bc969Sminshall  *]]]
281e4bc969Sminshall  *
291e4bc969Sminshall  */
301e4bc969Sminshall typedef struct {
312cd0b9fbSdab     unsigned char	*consume,	/* where data comes out of */
3258ab6e53Sminshall 			*supply,	/* where data comes in to */
331e4bc969Sminshall 			*bottom,	/* lowest address in buffer */
34cc687d58Sminshall 			*top,		/* highest address+1 in buffer */
35cc687d58Sminshall 			*mark;		/* marker (user defined) */
362d9ecb3aSdab #ifdef	ENCRYPTION
372cd0b9fbSdab     unsigned char	*clearto;	/* Data to this point is clear text */
382cd0b9fbSdab     unsigned char	*encryyptedto;	/* Data is encrypted to here */
392d9ecb3aSdab #endif	/* ENCRYPTION */
401e4bc969Sminshall     int		size;		/* size in bytes of buffer */
4158ab6e53Sminshall     u_long	consumetime,	/* help us keep straight full, empty, etc. */
4258ab6e53Sminshall 		supplytime;
431e4bc969Sminshall } Ring;
441e4bc969Sminshall 
451e4bc969Sminshall /* Here are some functions and macros to deal with the ring buffer */
461e4bc969Sminshall 
4701ec75b3Sminshall /* Initialization routine */
4801ec75b3Sminshall extern int
492cd0b9fbSdab 	ring_init P((Ring *ring, unsigned char *buffer, int count));
5001ec75b3Sminshall 
511e4bc969Sminshall /* Data movement routines */
521e4bc969Sminshall extern void
532cd0b9fbSdab 	ring_supply_data P((Ring *ring, unsigned char *buffer, int count));
54693d27aaSborman #ifdef notdef
55693d27aaSborman extern void
562cd0b9fbSdab 	ring_consume_data P((Ring *ring, unsigned char *buffer, int count));
57693d27aaSborman #endif
581e4bc969Sminshall 
591e4bc969Sminshall /* Buffer state transition routines */
601e4bc969Sminshall extern void
612cd0b9fbSdab 	ring_supplied P((Ring *ring, int count)),
622cd0b9fbSdab 	ring_consumed P((Ring *ring, int count));
631e4bc969Sminshall 
641e4bc969Sminshall /* Buffer state query routines */
651e4bc969Sminshall extern int
662cd0b9fbSdab 	ring_empty_count P((Ring *ring)),
672cd0b9fbSdab 	ring_empty_consecutive P((Ring *ring)),
682cd0b9fbSdab 	ring_full_count P((Ring *ring)),
692cd0b9fbSdab 	ring_full_consecutive P((Ring *ring));
701e4bc969Sminshall 
712d9ecb3aSdab #ifdef	ENCRYPTION
722686cc61Sminshall extern void
732cd0b9fbSdab 	ring_encrypt P((Ring *ring, void (*func)())),
742cd0b9fbSdab 	ring_clearto P((Ring *ring));
752d9ecb3aSdab #endif	/* ENCRYPTION */
762686cc61Sminshall 
772686cc61Sminshall extern void
782686cc61Sminshall     ring_clear_mark(),
792686cc61Sminshall     ring_mark();
80