119304Speter/*- 219304Speter * Copyright (c) 1991, 1993, 1994 319304Speter * The Regents of the University of California. All rights reserved. 419304Speter * Copyright (c) 1991, 1993, 1994, 1995, 1996 519304Speter * Keith Bostic. All rights reserved. 619304Speter * 719304Speter * See the LICENSE file for redistribution information. 819304Speter * 9254225Speter * $Id: cut.h,v 10.10 2012/02/11 15:52:33 zy Exp $ 1019304Speter */ 1119304Speter 1219304Spetertypedef struct _texth TEXTH; /* TEXT list head structure. */ 13254225SpeterTAILQ_HEAD(_texth, _text); 1419304Speter 1519304Speter/* Cut buffers. */ 1619304Speterstruct _cb { 17254225Speter SLIST_ENTRY(_cb) q; /* Linked list of cut buffers. */ 18254225Speter TEXTH textq[1]; /* Linked list of TEXT structures. */ 19254225Speter /* XXXX Needed ? Can non ascii-chars be cut buffer names ? */ 2019304Speter CHAR_T name; /* Cut buffer name. */ 2119304Speter size_t len; /* Total length of cut text. */ 2219304Speter 2319304Speter#define CB_LMODE 0x01 /* Cut was in line mode. */ 2419304Speter u_int8_t flags; 2519304Speter}; 2619304Speter 2719304Speter/* Lines/blocks of text. */ 2819304Speterstruct _text { /* Text: a linked list of lines. */ 29254225Speter TAILQ_ENTRY(_text) q; /* Linked list of text structures. */ 30254225Speter CHAR_T *lb; /* Line buffer. */ 3119304Speter size_t lb_len; /* Line buffer length. */ 3219304Speter size_t len; /* Line length. */ 3319304Speter 3419304Speter /* These fields are used by the vi text input routine. */ 3519304Speter recno_t lno; /* 1-N: file line. */ 36254225Speter 37254225Speter#define ENTIRE_LINE ((size_t)-1) /* cno: end of the line. */ 3819304Speter size_t cno; /* 0-N: file character in line. */ 3919304Speter size_t ai; /* 0-N: autoindent bytes. */ 4019304Speter size_t insert; /* 0-N: bytes to insert (push). */ 4119304Speter size_t offset; /* 0-N: initial, unerasable chars. */ 4219304Speter size_t owrite; /* 0-N: chars to overwrite. */ 4319304Speter size_t R_erase; /* 0-N: 'R' erase count. */ 4419304Speter size_t sv_cno; /* 0-N: Saved line cursor. */ 4519304Speter size_t sv_len; /* 0-N: Saved line length. */ 4619304Speter 4719304Speter /* 4819304Speter * These fields returns information from the vi text input routine. 4919304Speter * 5019304Speter * The termination condition. Note, this field is only valid if the 5119304Speter * text input routine returns success. 5219304Speter * TERM_BS: User backspaced over the prompt. 5319304Speter * TERM_CEDIT: User entered <edit-char>. 5419304Speter * TERM_CR: User entered <carriage-return>; no data. 5519304Speter * TERM_ESC: User entered <escape>; no data. 5619304Speter * TERM_OK: Data available. 5719304Speter * TERM_SEARCH: Incremental search. 5819304Speter */ 5919304Speter enum { 6019304Speter TERM_BS, TERM_CEDIT, TERM_CR, TERM_ESC, TERM_OK, TERM_SEARCH 6119304Speter } term; 6219304Speter}; 6319304Speter 6419304Speter/* 6519304Speter * Get named buffer 'name'. 6619304Speter * Translate upper-case buffer names to lower-case buffer names. 6719304Speter */ 6819304Speter#define CBNAME(sp, cbp, nch) { \ 6919304Speter CHAR_T L__name; \ 7019304Speter L__name = isupper(nch) ? tolower(nch) : (nch); \ 71254225Speter SLIST_FOREACH(cbp, sp->gp->cutq, q) \ 7219304Speter if (cbp->name == L__name) \ 7319304Speter break; \ 7419304Speter} 7519304Speter 7619304Speter/* Flags to the cut() routine. */ 7719304Speter#define CUT_LINEMODE 0x01 /* Cut in line mode. */ 7819304Speter#define CUT_NUMOPT 0x02 /* Numeric buffer: optional. */ 7919304Speter#define CUT_NUMREQ 0x04 /* Numeric buffer: required. */ 80