pass thread specific data do db
[nvi.git] / common / screen.h
blob4dac525f58d14197966f62fb9faf1292a0a3a11c
1 /*-
2 * Copyright (c) 1992, 1993, 1994
3 * The Regents of the University of California. All rights reserved.
4 * Copyright (c) 1992, 1993, 1994, 1995, 1996
5 * Keith Bostic. All rights reserved.
7 * See the LICENSE file for redistribution information.
9 * $Id: screen.h,v 10.37 2000/07/22 10:20:31 skimo Exp $ (Berkeley) $Date: 2000/07/22 10:20:31 $
13 * There are minimum values that vi has to have to display a screen. The row
14 * minimum is fixed at 1 (the svi code can share a line between the text line
15 * and the colon command/message line). Column calculation is a lot trickier.
16 * For example, you have to have enough columns to display the line number,
17 * not to mention guaranteeing that tabstop and shiftwidth values are smaller
18 * than the current column value. It's simpler to have a fixed value and not
19 * worry about it.
21 * XXX
22 * MINIMUM_SCREEN_COLS is almost certainly wrong.
24 #define MINIMUM_SCREEN_ROWS 1
25 #define MINIMUM_SCREEN_COLS 20
28 * WIN --
29 * A list of screens that are displayed as a whole.
31 struct _win {
32 CIRCLEQ_ENTRY(_win) q; /* Windows. */
34 CIRCLEQ_HEAD(_scrh, _scr) scrq; /* Screens */
36 GS *gp; /* Pointer to global area. */
38 void *perl_private; /* Perl interpreter. */
40 void *ip_private; /* IP support private area. */
42 void *th_private; /* Threading support private area. */
45 * Ex command structures (EXCMD). Defined here because ex commands
46 * exist outside of any particular screen or file.
48 #define EXCMD_RUNNING(wp) ((wp)->ecq.lh_first->clen != 0)
49 LIST_HEAD(_excmdh, _excmd) ecq; /* Ex command linked list. */
50 EXCMD excmd; /* Default ex command structure. */
51 char *if_name; /* Current associated file. */
52 db_recno_t if_lno; /* Current associated line number. */
54 /* For now, can be either char or CHAR_T buffer */
55 char *tmp_bp; /* Temporary buffer. */
56 size_t tmp_blen; /* Temporary buffer size. */
58 char *l_lp; /* Log buffer. */
59 size_t l_len; /* Log buffer length. */
61 char *conv_bp;
62 size_t conv_blen;
64 /* Flags. */
65 #define W_TMP_INUSE 0x0001 /* Temporary buffer in use. */
66 u_int32_t flags;
69 extern CHAR_T RE_WSTART[8];
70 extern CHAR_T RE_WSTOP[8];
72 * SCR --
73 * The screen structure. To the extent possible, all screen information
74 * is stored in the various private areas. The only information here
75 * is used by global routines or is shared by too many screens.
77 struct _scr {
78 /* INITIALIZED AT SCREEN CREATE. */
79 CIRCLEQ_ENTRY(_scr) q; /* Screens. */
81 int id; /* Screen id #. */
82 int refcnt; /* Reference count. */
84 WIN *wp; /* Pointer to window. */
85 GS *gp; /* Pointer to global area. */
86 SCR *nextdisp; /* Next display screen. */
87 SCR *ccl_parent; /* Colon command-line parent screen. */
88 EXF *ep; /* Screen's current EXF structure. */
90 FREF *frp; /* FREF being edited. */
91 char **argv; /* NULL terminated file name array. */
92 char **cargv; /* Current file name. */
94 u_long ccnt; /* Command count. */
95 u_long q_ccnt; /* Quit or ZZ command count. */
97 /* Screen's: */
98 size_t rows; /* 1-N: number of rows. */
99 size_t cols; /* 1-N: number of columns. */
100 size_t t_rows; /* 1-N: cur number of text rows. */
101 size_t t_maxrows; /* 1-N: max number of text rows. */
102 size_t t_minrows; /* 1-N: min number of text rows. */
103 size_t coff; /* 0-N: screen col offset in display. */
104 size_t roff; /* 0-N: screen row offset in display. */
106 /* Cursor's: */
107 db_recno_t lno; /* 1-N: file line. */
108 size_t cno; /* 0-N: file character in line. */
110 size_t rcm; /* Vi: 0-N: Most attractive column. */
112 #define L_ADDED 0 /* Added lines. */
113 #define L_CHANGED 1 /* Changed lines. */
114 #define L_DELETED 2 /* Deleted lines. */
115 #define L_JOINED 3 /* Joined lines. */
116 #define L_MOVED 4 /* Moved lines. */
117 #define L_SHIFT 5 /* Shift lines. */
118 #define L_YANKED 6 /* Yanked lines. */
119 db_recno_t rptlchange; /* Ex/vi: last L_CHANGED lno. */
120 db_recno_t rptlines[L_YANKED + 1];/* Ex/vi: lines changed by last op. */
122 TEXTH tiq; /* Ex/vi: text input queue. */
124 SCRIPT *script; /* Vi: script mode information .*/
126 db_recno_t defscroll; /* Vi: ^D, ^U scroll information. */
128 /* Display character. */
129 u_char cname[MAX_CHARACTER_COLUMNS + 1];
130 size_t clen; /* Length of display character. */
132 enum { /* Vi editor mode. */
133 SM_APPEND = 0, SM_CHANGE, SM_COMMAND, SM_INSERT,
134 SM_REPLACE } showmode;
136 void *ex_private; /* Ex private area. */
137 void *vi_private; /* Vi private area. */
138 void *perl_private; /* Perl private area. */
139 void *cl_private; /* Curses private area. */
141 CONV *conv;
143 /* PARTIALLY OR COMPLETELY COPIED FROM PREVIOUS SCREEN. */
144 char *alt_name; /* Ex/vi: alternate file name. */
146 CHAR_T at_lbuf; /* Ex/vi: Last executed at buffer. */
148 /* Ex/vi: re_compile flags. */
149 #if 0
150 #define RE_WSTART "[[:<:]]" /* Ex/vi: not-in-word search pattern. */
151 #define RE_WSTOP "[[:>:]]"
152 #endif
153 /* Ex/vi: flags to search routines. */
154 #define SEARCH_CSCOPE 0x000001 /* Search for a cscope pattern. */
155 #define SEARCH_CSEARCH 0x000002 /* Compile search replacement. */
156 #define SEARCH_CSUBST 0x000004 /* Compile substitute replacement. */
157 #define SEARCH_EOL 0x000008 /* Offset past EOL is okay. */
158 #define SEARCH_EXTEND 0x000010 /* Extended RE. */
159 #define SEARCH_FIRST 0x000020 /* Search from the first line. */
160 #define SEARCH_IC 0x000040 /* Ignore case. */
161 #define SEARCH_ICL 0x000080 /* Ignore case. */
162 #define SEARCH_INCR 0x000100 /* Search incrementally. */
163 #define SEARCH_LITERAL 0x000200 /* Literal string. */
164 #define SEARCH_MSG 0x000400 /* Display search messages. */
165 #define SEARCH_NOOPT 0x000800 /* Ignore edit options. */
166 #define SEARCH_PARSE 0x001000 /* Parse the search pattern. */
167 #define SEARCH_SET 0x002000 /* Set search direction. */
168 #define SEARCH_TAG 0x004000 /* Search for a tag pattern. */
169 #define SEARCH_WMSG 0x008000 /* Display search-wrapped messages. */
170 #define SEARCH_WRAP 0x010000 /* Wrap past sof/eof. */
172 /* Ex/vi: RE information. */
173 dir_t searchdir; /* Last file search direction. */
174 regex_t re_c; /* Search RE: compiled form. */
175 CHAR_T *re; /* Search RE: uncompiled form. */
176 size_t re_len; /* Search RE: uncompiled length. */
177 regex_t subre_c; /* Substitute RE: compiled form. */
178 CHAR_T *subre; /* Substitute RE: uncompiled form. */
179 size_t subre_len; /* Substitute RE: uncompiled length). */
180 CHAR_T *repl; /* Substitute replacement. */
181 size_t repl_len; /* Substitute replacement length.*/
182 size_t *newl; /* Newline offset array. */
183 size_t newl_len; /* Newline array size. */
184 size_t newl_cnt; /* Newlines in replacement. */
185 u_int8_t c_suffix; /* Edcompatible 'c' suffix value. */
186 u_int8_t g_suffix; /* Edcompatible 'g' suffix value. */
188 OPTION opts[O_OPTIONCOUNT]; /* Ex/vi: Options. */
191 * Screen flags.
193 * Editor screens.
195 #define SC_EX 0x00000001 /* Ex editor. */
196 #define SC_VI 0x00000002 /* Vi editor. */
199 * Screen formatting flags, first major, then minor.
201 * SC_SCR_EX
202 * Ex screen, i.e. cooked mode.
203 * SC_SCR_VI
204 * Vi screen, i.e. raw mode.
205 * SC_SCR_EXWROTE
206 * The editor had to write on the screen behind curses' back, and we can't
207 * let curses change anything until the user agrees, e.g. entering the
208 * commands :!utility followed by :set. We have to switch back into the
209 * vi "editor" to read the user's command input, but we can't touch the
210 * rest of the screen because it's known to be wrong.
211 * SC_SCR_REFORMAT
212 * The expected presentation of the lines on the screen have changed,
213 * requiring that the intended screen lines be recalculated. Implies
214 * SC_SCR_REDRAW.
215 * SC_SCR_REDRAW
216 * The screen doesn't correctly represent the file; repaint it. Note,
217 * setting SC_SCR_REDRAW in the current window causes *all* windows to
218 * be repainted.
219 * SC_SCR_CENTER
220 * If the current line isn't already on the screen, center it.
221 * SC_SCR_TOP
222 * If the current line isn't already on the screen, put it at the to@.
224 #define SC_SCR_EX 0x00000004 /* Screen is in ex mode. */
225 #define SC_SCR_VI 0x00000008 /* Screen is in vi mode. */
226 #define SC_SCR_EXWROTE 0x00000010 /* Ex overwrite: see comment above. */
227 #define SC_SCR_REFORMAT 0x00000020 /* Reformat (refresh). */
228 #define SC_SCR_REDRAW 0x00000040 /* Refresh. */
230 #define SC_SCR_CENTER 0x00000080 /* Center the line if not visible. */
231 #define SC_SCR_TOP 0x00000100 /* Top the line if not visible. */
233 /* Screen/file changes. */
234 #define SC_EXIT 0x00000200 /* Exiting (not forced). */
235 #define SC_EXIT_FORCE 0x00000400 /* Exiting (forced). */
236 #define SC_FSWITCH 0x00000800 /* Switch underlying files. */
237 #define SC_SSWITCH 0x00001000 /* Switch screens. */
239 #define SC_ARGNOFREE 0x00002000 /* Argument list wasn't allocated. */
240 #define SC_ARGRECOVER 0x00004000 /* Argument list is recovery files. */
241 #define SC_AT_SET 0x00008000 /* Last at buffer set. */
242 #define SC_COMEDIT 0x00010000 /* Colon command-line edit window. */
243 #define SC_EX_GLOBAL 0x00020000 /* Ex: executing a global command. */
244 #define SC_EX_SILENT 0x00040000 /* Ex: batch script. */
245 #define SC_EX_WAIT_NO 0x00080000 /* Ex: don't wait for the user. */
246 #define SC_EX_WAIT_YES 0x00100000 /* Ex: do wait for the user. */
247 #define SC_READONLY 0x00200000 /* Persistent readonly state. */
248 #define SC_RE_SEARCH 0x00400000 /* Search RE has been compiled. */
249 #define SC_RE_SUBST 0x00800000 /* Substitute RE has been compiled. */
250 #define SC_SCRIPT 0x01000000 /* Shell script window. */
251 #define SC_STATUS 0x02000000 /* Welcome message. */
252 #define SC_STATUS_CNT 0x04000000 /* Welcome message plus file count. */
253 #define SC_TINPUT 0x08000000 /* Doing text input. */
254 #define SC_TINPUT_INFO 0x10000000 /* Doing text input on info line. */
255 u_int32_t flags;
257 int db_error; /* Return code from db function. */