1*721c3ea3Smartijn /* $OpenBSD: cut.h,v 1.9 2016/05/27 09:18:11 martijn Exp $ */ 2d4e7c603Sniklas 3df930be7Sderaadt /*- 4df930be7Sderaadt * Copyright (c) 1991, 1993, 1994 5df930be7Sderaadt * The Regents of the University of California. All rights reserved. 645f2ab88Sderaadt * Copyright (c) 1991, 1993, 1994, 1995, 1996 745f2ab88Sderaadt * Keith Bostic. All rights reserved. 8df930be7Sderaadt * 945f2ab88Sderaadt * See the LICENSE file for redistribution information. 10df930be7Sderaadt * 1145f2ab88Sderaadt * @(#)cut.h 10.5 (Berkeley) 4/3/96 12df930be7Sderaadt */ 13df930be7Sderaadt 14df930be7Sderaadt typedef struct _texth TEXTH; /* TEXT list head structure. */ 156afab947Skrw TAILQ_HEAD(_texth, _text); 16df930be7Sderaadt 17df930be7Sderaadt /* Cut buffers. */ 18df930be7Sderaadt struct _cb { 19df930be7Sderaadt LIST_ENTRY(_cb) q; /* Linked list of cut buffers. */ 20df930be7Sderaadt TEXTH textq; /* Linked list of TEXT structures. */ 21*721c3ea3Smartijn CHAR_T name; /* Cut buffer name. */ 22df930be7Sderaadt size_t len; /* Total length of cut text. */ 23df930be7Sderaadt 24df930be7Sderaadt #define CB_LMODE 0x01 /* Cut was in line mode. */ 25df930be7Sderaadt u_int8_t flags; 26df930be7Sderaadt }; 27df930be7Sderaadt 28df930be7Sderaadt /* Lines/blocks of text. */ 29df930be7Sderaadt struct _text { /* Text: a linked list of lines. */ 306afab947Skrw TAILQ_ENTRY(_text) q; /* Linked list of text structures. */ 31df930be7Sderaadt char *lb; /* Line buffer. */ 32df930be7Sderaadt size_t lb_len; /* Line buffer length. */ 33df930be7Sderaadt size_t len; /* Line length. */ 34df930be7Sderaadt 35df930be7Sderaadt /* These fields are used by the vi text input routine. */ 3645f2ab88Sderaadt recno_t lno; /* 1-N: file line. */ 3745f2ab88Sderaadt size_t cno; /* 0-N: file character in line. */ 38df930be7Sderaadt size_t ai; /* 0-N: autoindent bytes. */ 39df930be7Sderaadt size_t insert; /* 0-N: bytes to insert (push). */ 40df930be7Sderaadt size_t offset; /* 0-N: initial, unerasable chars. */ 41df930be7Sderaadt size_t owrite; /* 0-N: chars to overwrite. */ 42df930be7Sderaadt size_t R_erase; /* 0-N: 'R' erase count. */ 43df930be7Sderaadt size_t sv_cno; /* 0-N: Saved line cursor. */ 44df930be7Sderaadt size_t sv_len; /* 0-N: Saved line length. */ 45df930be7Sderaadt 4645f2ab88Sderaadt /* 4745f2ab88Sderaadt * These fields returns information from the vi text input routine. 4845f2ab88Sderaadt * 4945f2ab88Sderaadt * The termination condition. Note, this field is only valid if the 5045f2ab88Sderaadt * text input routine returns success. 5145f2ab88Sderaadt * TERM_BS: User backspaced over the prompt. 5245f2ab88Sderaadt * TERM_CEDIT: User entered <edit-char>. 5345f2ab88Sderaadt * TERM_CR: User entered <carriage-return>; no data. 5445f2ab88Sderaadt * TERM_ESC: User entered <escape>; no data. 5545f2ab88Sderaadt * TERM_OK: Data available. 5645f2ab88Sderaadt * TERM_SEARCH: Incremental search. 5745f2ab88Sderaadt */ 5845f2ab88Sderaadt enum { 5945f2ab88Sderaadt TERM_BS, TERM_CEDIT, TERM_CR, TERM_ESC, TERM_OK, TERM_SEARCH 6045f2ab88Sderaadt } term; 61df930be7Sderaadt }; 62df930be7Sderaadt 63df930be7Sderaadt /* 64df930be7Sderaadt * Get named buffer 'name'. 65df930be7Sderaadt * Translate upper-case buffer names to lower-case buffer names. 66df930be7Sderaadt */ 67df930be7Sderaadt #define CBNAME(sp, cbp, nch) { \ 68*721c3ea3Smartijn CHAR_T L__name; \ 6945f2ab88Sderaadt L__name = isupper(nch) ? tolower(nch) : (nch); \ 70ce7de1e9Sotto LIST_FOREACH((cbp), &(sp)->gp->cutq, q) \ 71ddc53e66Smiod if ((cbp)->name == L__name) \ 72df930be7Sderaadt break; \ 73df930be7Sderaadt } 74df930be7Sderaadt 7545f2ab88Sderaadt /* Flags to the cut() routine. */ 76df930be7Sderaadt #define CUT_LINEMODE 0x01 /* Cut in line mode. */ 77df930be7Sderaadt #define CUT_NUMOPT 0x02 /* Numeric buffer: optional. */ 78df930be7Sderaadt #define CUT_NUMREQ 0x04 /* Numeric buffer: required. */ 79c32a7226Shugh 80c32a7226Shugh /* Special length to cut_line(). */ 81c32a7226Shugh #define CUT_LINE_TO_EOL ((size_t) -1) /* Cut to the end of line. */ 82