xref: /onnv-gate/usr/src/cmd/cmd-inet/usr.bin/telnet/ring.h (revision 0:68f95e015346)
1*0Sstevel@tonic-gate /*
2*0Sstevel@tonic-gate  * Copyright 2001-2002 Sun Microsystems, Inc.  All rights reserved.
3*0Sstevel@tonic-gate  * Use is subject to license terms.
4*0Sstevel@tonic-gate  */
5*0Sstevel@tonic-gate 
6*0Sstevel@tonic-gate /*
7*0Sstevel@tonic-gate  * Copyright (c) 1988, 1993
8*0Sstevel@tonic-gate  *	The Regents of the University of California.  All rights reserved.
9*0Sstevel@tonic-gate  *
10*0Sstevel@tonic-gate  * Redistribution and use in source and binary forms, with or without
11*0Sstevel@tonic-gate  * modification, are permitted provided that the following conditions
12*0Sstevel@tonic-gate  * are met:
13*0Sstevel@tonic-gate  * 1. Redistributions of source code must retain the above copyright
14*0Sstevel@tonic-gate  *    notice, this list of conditions and the following disclaimer.
15*0Sstevel@tonic-gate  * 2. Redistributions in binary form must reproduce the above copyright
16*0Sstevel@tonic-gate  *    notice, this list of conditions and the following disclaimer in the
17*0Sstevel@tonic-gate  *    documentation and/or other materials provided with the distribution.
18*0Sstevel@tonic-gate  * 3. All advertising materials mentioning features or use of this software
19*0Sstevel@tonic-gate  *    must display the following acknowledgement:
20*0Sstevel@tonic-gate  *	This product includes software developed by the University of
21*0Sstevel@tonic-gate  *	California, Berkeley and its contributors.
22*0Sstevel@tonic-gate  * 4. Neither the name of the University nor the names of its contributors
23*0Sstevel@tonic-gate  *    may be used to endorse or promote products derived from this software
24*0Sstevel@tonic-gate  *    without specific prior written permission.
25*0Sstevel@tonic-gate  *
26*0Sstevel@tonic-gate  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
27*0Sstevel@tonic-gate  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28*0Sstevel@tonic-gate  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29*0Sstevel@tonic-gate  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
30*0Sstevel@tonic-gate  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
31*0Sstevel@tonic-gate  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
32*0Sstevel@tonic-gate  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33*0Sstevel@tonic-gate  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34*0Sstevel@tonic-gate  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35*0Sstevel@tonic-gate  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36*0Sstevel@tonic-gate  * SUCH DAMAGE.
37*0Sstevel@tonic-gate  *
38*0Sstevel@tonic-gate  *	@(#)ring.h	8.1 (Berkeley) 6/6/93
39*0Sstevel@tonic-gate  */
40*0Sstevel@tonic-gate 
41*0Sstevel@tonic-gate #ifndef _RING_H
42*0Sstevel@tonic-gate #define	_RING_H
43*0Sstevel@tonic-gate 
44*0Sstevel@tonic-gate #pragma ident	"%Z%%M%	%I%	%E% SMI"
45*0Sstevel@tonic-gate 
46*0Sstevel@tonic-gate #ifdef	__cplusplus
47*0Sstevel@tonic-gate extern "C" {
48*0Sstevel@tonic-gate #endif
49*0Sstevel@tonic-gate 
50*0Sstevel@tonic-gate /*
51*0Sstevel@tonic-gate  * This defines a structure for a ring buffer.
52*0Sstevel@tonic-gate  *
53*0Sstevel@tonic-gate  * The circular buffer has two parts:
54*0Sstevel@tonic-gate  * (((
55*0Sstevel@tonic-gate  *	full:	[consume, supply)
56*0Sstevel@tonic-gate  *	empty:	[supply, consume)
57*0Sstevel@tonic-gate  * ]]]
58*0Sstevel@tonic-gate  *
59*0Sstevel@tonic-gate  */
60*0Sstevel@tonic-gate typedef struct {
61*0Sstevel@tonic-gate     unsigned char *consume;	/* where data comes out of */
62*0Sstevel@tonic-gate     unsigned char *supply;	/* where data comes in to */
63*0Sstevel@tonic-gate     unsigned char *bottom;	/* lowest address in buffer */
64*0Sstevel@tonic-gate     unsigned char *top;		/* highest address+1 in buffer */
65*0Sstevel@tonic-gate     unsigned char *mark;	/* marker (user defined) */
66*0Sstevel@tonic-gate     unsigned char *clearto;	/* Data to this point is clear text */
67*0Sstevel@tonic-gate     unsigned char *encryyptedto; /* Data is encrypted to here */
68*0Sstevel@tonic-gate     int		size;		/* size in bytes of buffer */
69*0Sstevel@tonic-gate     ulong_t	consumetime;	/* help us keep straight full, empty, etc. */
70*0Sstevel@tonic-gate     ulong_t	supplytime;
71*0Sstevel@tonic-gate } Ring;
72*0Sstevel@tonic-gate 
73*0Sstevel@tonic-gate /* Here are some functions and macros to deal with the ring buffer */
74*0Sstevel@tonic-gate 
75*0Sstevel@tonic-gate /* Initialization routine */
76*0Sstevel@tonic-gate extern int ring_init(Ring *ring, unsigned char *buffer, int count);
77*0Sstevel@tonic-gate 
78*0Sstevel@tonic-gate /* Data movement routines */
79*0Sstevel@tonic-gate extern void ring_supply_data(Ring *ring, unsigned char *buffer, int count);
80*0Sstevel@tonic-gate #ifdef notdef
81*0Sstevel@tonic-gate extern void ring_consume_data(Ring *ring, unsigned char *buffer, int count);
82*0Sstevel@tonic-gate #endif
83*0Sstevel@tonic-gate 
84*0Sstevel@tonic-gate /* Buffer state transition routines */
85*0Sstevel@tonic-gate extern void ring_supplied(Ring *ring, int count);
86*0Sstevel@tonic-gate extern void ring_consumed(Ring *ring, int count);
87*0Sstevel@tonic-gate 
88*0Sstevel@tonic-gate /* Buffer state query routines */
89*0Sstevel@tonic-gate extern int ring_at_mark(Ring *ring);
90*0Sstevel@tonic-gate extern int ring_empty_count(Ring *ring);
91*0Sstevel@tonic-gate extern int ring_empty_consecutive(Ring *ring);
92*0Sstevel@tonic-gate extern int ring_full_count(Ring *ring);
93*0Sstevel@tonic-gate extern int ring_full_consecutive(Ring *ring);
94*0Sstevel@tonic-gate 
95*0Sstevel@tonic-gate extern void ring_encrypt(Ring *ring, void (*func)());
96*0Sstevel@tonic-gate extern void ring_clearto(Ring *ring);
97*0Sstevel@tonic-gate 
98*0Sstevel@tonic-gate extern void ring_clear_mark();
99*0Sstevel@tonic-gate extern void ring_mark();
100*0Sstevel@tonic-gate 
101*0Sstevel@tonic-gate 
102*0Sstevel@tonic-gate #ifdef	__cplusplus
103*0Sstevel@tonic-gate }
104*0Sstevel@tonic-gate #endif
105*0Sstevel@tonic-gate 
106*0Sstevel@tonic-gate #endif	/* _RING_H */
107