xref: /openbsd/usr.bin/vi/common/cut.h (revision 721c3ea3)
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