cut.h revision 1.2 1 1.2 christos /* $NetBSD: cut.h,v 1.2 2013/11/22 15:52:05 christos Exp $ */
2 1.1 christos /*-
3 1.1 christos * Copyright (c) 1991, 1993, 1994
4 1.1 christos * The Regents of the University of California. All rights reserved.
5 1.1 christos * Copyright (c) 1991, 1993, 1994, 1995, 1996
6 1.1 christos * Keith Bostic. All rights reserved.
7 1.1 christos *
8 1.1 christos * See the LICENSE file for redistribution information.
9 1.1 christos *
10 1.1 christos * Id: cut.h,v 10.9 2000/07/22 17:31:18 skimo Exp (Berkeley) Date: 2000/07/22 17:31:18
11 1.1 christos */
12 1.1 christos
13 1.1 christos typedef struct _texth TEXTH; /* TEXT list head structure. */
14 1.1 christos CIRCLEQ_HEAD(_texth, _text);
15 1.1 christos
16 1.1 christos /* Cut buffers. */
17 1.1 christos struct _cb {
18 1.1 christos LIST_ENTRY(_cb) q; /* Linked list of cut buffers. */
19 1.1 christos TEXTH textq; /* Linked list of TEXT structures. */
20 1.1 christos /* XXXX Needed ? Can non ascii-chars be cut buffer names ? */
21 1.2 christos ARG_CHAR_T name; /* Cut buffer name. */
22 1.1 christos size_t len; /* Total length of cut text. */
23 1.1 christos
24 1.1 christos #define CB_LMODE 0x01 /* Cut was in line mode. */
25 1.1 christos u_int8_t flags;
26 1.1 christos };
27 1.1 christos
28 1.1 christos /* Lines/blocks of text. */
29 1.1 christos struct _text { /* Text: a linked list of lines. */
30 1.1 christos CIRCLEQ_ENTRY(_text) q; /* Linked list of text structures. */
31 1.1 christos CHAR_T *lb; /* Line buffer. */
32 1.1 christos size_t lb_len; /* Line buffer length. */
33 1.1 christos size_t len; /* Line length. */
34 1.1 christos
35 1.1 christos /* These fields are used by the vi text input routine. */
36 1.1 christos db_recno_t lno; /* 1-N: file line. */
37 1.1 christos size_t cno; /* 0-N: file character in line. */
38 1.1 christos size_t ai; /* 0-N: autoindent bytes. */
39 1.1 christos size_t insert; /* 0-N: bytes to insert (push). */
40 1.1 christos size_t offset; /* 0-N: initial, unerasable chars. */
41 1.1 christos size_t owrite; /* 0-N: chars to overwrite. */
42 1.1 christos size_t R_erase; /* 0-N: 'R' erase count. */
43 1.1 christos size_t sv_cno; /* 0-N: Saved line cursor. */
44 1.1 christos size_t sv_len; /* 0-N: Saved line length. */
45 1.1 christos
46 1.1 christos /*
47 1.1 christos * These fields returns information from the vi text input routine.
48 1.1 christos *
49 1.1 christos * The termination condition. Note, this field is only valid if the
50 1.1 christos * text input routine returns success.
51 1.1 christos * TERM_BS: User backspaced over the prompt.
52 1.1 christos * TERM_CEDIT: User entered <edit-char>.
53 1.1 christos * TERM_CR: User entered <carriage-return>; no data.
54 1.1 christos * TERM_ESC: User entered <escape>; no data.
55 1.1 christos * TERM_OK: Data available.
56 1.1 christos * TERM_SEARCH: Incremental search.
57 1.1 christos */
58 1.1 christos enum {
59 1.1 christos TERM_BS, TERM_CEDIT, TERM_CR, TERM_ESC, TERM_OK, TERM_SEARCH
60 1.1 christos } term;
61 1.1 christos };
62 1.1 christos
63 1.1 christos /*
64 1.1 christos * Get named buffer 'name'.
65 1.1 christos * Translate upper-case buffer names to lower-case buffer names.
66 1.1 christos */
67 1.1 christos #define CBNAME(sp, cbp, nch) { \
68 1.2 christos ARG_CHAR_T L__name; \
69 1.1 christos L__name = ISUPPER(nch) ? TOLOWER(nch) : (nch); \
70 1.1 christos for (cbp = sp->wp->cutq.lh_first; \
71 1.1 christos cbp != NULL; cbp = cbp->q.le_next) \
72 1.1 christos if (cbp->name == L__name) \
73 1.1 christos break; \
74 1.1 christos }
75 1.1 christos
76 1.1 christos /* Flags to the cut() routine. */
77 1.1 christos #define CUT_LINEMODE 0x01 /* Cut in line mode. */
78 1.1 christos #define CUT_NUMOPT 0x02 /* Numeric buffer: optional. */
79 1.1 christos #define CUT_NUMREQ 0x04 /* Numeric buffer: required. */
80