~ubuntu-branches/ubuntu/wily/netkit-telnet-ssl/wily-proposed

« back to all changes in this revision

Viewing changes to .pc/545-track_scm.diff/telnet/ring.h

  • Committer: Package Import Robot
  • Author(s): Mats Erik Andersson
  • Date: 2015-04-27 23:20:22 UTC
  • mfrom: (7.1.2 sid)
  • Revision ID: package-import@ubuntu.com-20150427232022-c2f04nl1gr4qyqom
Tags: 0.17.40+0.2-1
* Bring in package changes from experimental to unstable.
* Update to source version 0.17-40 of netkit-telnet.
  + debian/rules: Define and use the variable LDDEFS.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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, with or without
 
6
 * modification, are permitted provided that the following conditions
 
7
 * are met:
 
8
 * 1. Redistributions of source code must retain the above copyright
 
9
 *    notice, this list of conditions and the following disclaimer.
 
10
 * 2. Redistributions in binary form must reproduce the above copyright
 
11
 *    notice, this list of conditions and the following disclaimer in the
 
12
 *    documentation and/or other materials provided with the distribution.
 
13
 * 3. All advertising materials mentioning features or use of this software
 
14
 *    must display the following acknowledgement:
 
15
 *      This product includes software developed by the University of
 
16
 *      California, Berkeley and its contributors.
 
17
 * 4. Neither the name of the University nor the names of its contributors
 
18
 *    may be used to endorse or promote products derived from this software
 
19
 *    without specific prior written permission.
 
20
 *
 
21
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 
22
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 
23
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 
24
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 
25
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 
26
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 
27
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 
28
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 
29
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 
30
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 
31
 * SUCH DAMAGE.
 
32
 *
 
33
 *      from: @(#)ring.h        5.2 (Berkeley) 3/1/91
 
34
 *      $Id: ring.h,v 1.13 1996/08/13 08:43:28 dholland Exp $
 
35
 */
 
36
 
 
37
class datasink {
 
38
 public:
 
39
    virtual ~datasink() {}
 
40
    virtual int write(const char *buf, int len) = 0;
 
41
    virtual int writeurg(const char *buf, int len) = 0;
 
42
};
 
43
 
 
44
/*
 
45
 * This defines a structure for a ring buffer.
 
46
 */
 
47
class ringbuf {
 
48
 public:
 
49
    class source {
 
50
     public:
 
51
        virtual ~source() {}
 
52
        virtual int read(char *buf, int len) = 0;
 
53
    };
 
54
 protected:
 
55
    datasink *binding;
 
56
    source *srcbinding;
 
57
 
 
58
    char *buf;
 
59
    int size;   /* total size of buffer */
 
60
    int head;   /* next input character goes here */
 
61
    int tail;   /* next output character comes from here */
 
62
    int count;  /* chars presently stored in buffer */
 
63
    // The buffer is empty when head==tail.
 
64
 
 
65
    int marked;   /* this character is marked */
 
66
 
 
67
 public:
 
68
    /////// consume end
 
69
 
 
70
    // manual consume
 
71
    int gets(char *buf, int max);
 
72
    int getch(int *ch);
 
73
    void ungetch(int ch);
 
74
    int full_count() {
 
75
        return count;
 
76
    }
 
77
 
 
78
    // automatic consume
 
79
    int flush();
 
80
 
 
81
    /////// supply end
 
82
 
 
83
    // manual supply
 
84
    void putch(char c) { write(&c, 1); }
 
85
    void write(const char *buffer, int ct);
 
86
    void xprintf(const char *format, ...);
 
87
    int empty_count() { return size - count; }
 
88
 
 
89
    // automatic supply
 
90
    int read_source();
 
91
 
 
92
    /////// others
 
93
    void clear_mark() { marked = -1; }
 
94
    void set_mark() { marked = head; }
 
95
 
 
96
    int init(int size, datasink *sink, source *src);
 
97
 
 
98
    datasink *setsink(datasink *nu) {
 
99
        datasink *old = binding;
 
100
        binding = nu;
 
101
        return old;
 
102
    }
 
103
 
 
104
};
 
105
 
 
106
extern datasink *netsink, *ttysink, *nullsink;
 
107
extern ringbuf::source *netsrc, *ttysrc;
 
108
 
 
109
#define NETADD(c)       { netoring.putch(c); }
 
110
#define NET2ADD(c1,c2)  { NETADD(c1); NETADD(c2); }
 
111