source: trunk/third/nvi/common/screen.h @ 14302

Revision 14302, 7.9 KB checked in by ghudson, 25 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r14301, which included commits to RCS files with non-trunk default branches.
Line 
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.
6 *
7 * See the LICENSE file for redistribution information.
8 *
9 *      @(#)screen.h    10.24 (Berkeley) 7/19/96
10 */
11
12/*
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.
20 *
21 * XXX
22 * MINIMUM_SCREEN_COLS is almost certainly wrong.
23 */
24#define MINIMUM_SCREEN_ROWS      1
25#define MINIMUM_SCREEN_COLS     20
26
27/*
28 * SCR --
29 *      The screen structure.  To the extent possible, all screen information
30 *      is stored in the various private areas.  The only information here
31 *      is used by global routines or is shared by too many screens.
32 */
33struct _scr {
34/* INITIALIZED AT SCREEN CREATE. */
35        CIRCLEQ_ENTRY(_scr) q;          /* Screens. */
36
37        int      id;                    /* Screen id #. */
38        int      refcnt;                /* Reference count. */
39
40        GS      *gp;                    /* Pointer to global area. */
41        SCR     *nextdisp;              /* Next display screen. */
42        SCR     *ccl_parent;            /* Colon command-line parent screen. */
43        EXF     *ep;                    /* Screen's current EXF structure. */
44
45        FREF    *frp;                   /* FREF being edited. */
46        char    **argv;                 /* NULL terminated file name array. */
47        char    **cargv;                /* Current file name. */
48
49        u_long   ccnt;                  /* Command count. */
50        u_long   q_ccnt;                /* Quit or ZZ command count. */
51
52                                        /* Screen's: */
53        size_t   rows;                  /* 1-N: number of rows. */
54        size_t   cols;                  /* 1-N: number of columns. */
55        size_t   t_rows;                /* 1-N: cur number of text rows. */
56        size_t   t_maxrows;             /* 1-N: max number of text rows. */
57        size_t   t_minrows;             /* 1-N: min number of text rows. */
58        size_t   woff;                  /* 0-N: screen offset in frame. */
59
60                                        /* Cursor's: */
61        recno_t  lno;                   /* 1-N: file line. */
62        size_t   cno;                   /* 0-N: file character in line. */
63
64        size_t   rcm;                   /* Vi: 0-N: Most attractive column. */
65
66#define L_ADDED         0               /* Added lines. */
67#define L_CHANGED       1               /* Changed lines. */
68#define L_DELETED       2               /* Deleted lines. */
69#define L_JOINED        3               /* Joined lines. */
70#define L_MOVED         4               /* Moved lines. */
71#define L_SHIFT         5               /* Shift lines. */
72#define L_YANKED        6               /* Yanked lines. */
73        recno_t  rptlchange;            /* Ex/vi: last L_CHANGED lno. */
74        recno_t  rptlines[L_YANKED + 1];/* Ex/vi: lines changed by last op. */
75
76        TEXTH    tiq;                   /* Ex/vi: text input queue. */
77
78        SCRIPT  *script;                /* Vi: script mode information .*/
79
80        recno_t  defscroll;             /* Vi: ^D, ^U scroll information. */
81
82                                        /* Display character. */
83        CHAR_T   cname[MAX_CHARACTER_COLUMNS + 1];
84        size_t   clen;                  /* Length of display character. */
85
86        enum {                          /* Vi editor mode. */
87            SM_APPEND = 0, SM_CHANGE, SM_COMMAND, SM_INSERT,
88            SM_REPLACE } showmode;
89
90        void    *ex_private;            /* Ex private area. */
91        void    *vi_private;            /* Vi private area. */
92        void    *perl_private;          /* Perl private area. */
93
94/* PARTIALLY OR COMPLETELY COPIED FROM PREVIOUS SCREEN. */
95        char    *alt_name;              /* Ex/vi: alternate file name. */
96
97        CHAR_T   at_lbuf;               /* Ex/vi: Last executed at buffer. */
98
99                                        /* Ex/vi: re_compile flags. */
100#define RE_C_CSCOPE     0x0001          /* Compile cscope pattern. */
101#define RE_C_SEARCH     0x0002          /* Compile search replacement. */
102#define RE_C_SILENT     0x0004          /* No error messages. */
103#define RE_C_SUBST      0x0008          /* Compile substitute replacement. */
104#define RE_C_TAG        0x0010          /* Compile ctag pattern. */
105
106#define RE_WSTART       "[[:<:]]"       /* Ex/vi: not-in-word search pattern. */
107#define RE_WSTOP        "[[:>:]]"
108                                        /* Ex/vi: flags to search routines. */
109#define SEARCH_CSCOPE   0x0001          /* Search for a cscope pattern. */
110#define SEARCH_EOL      0x0002          /* Offset past EOL is okay. */
111#define SEARCH_FILE     0x0004          /* Search the entire file. */
112#define SEARCH_INCR     0x0008          /* Search incrementally. */
113#define SEARCH_MSG      0x0010          /* Display search messages. */
114#define SEARCH_PARSE    0x0020          /* Parse the search pattern. */
115#define SEARCH_SET      0x0040          /* Set search direction. */
116#define SEARCH_TAG      0x0080          /* Search for a tag pattern. */
117#define SEARCH_WMSG     0x0100          /* Display search-wrapped messages. */
118
119                                        /* Ex/vi: RE information. */
120        dir_t    searchdir;             /* Last file search direction. */
121        regex_t  re_c;                  /* Search RE: compiled form. */
122        char    *re;                    /* Search RE: uncompiled form. */
123        size_t   re_len;                /* Search RE: uncompiled length. */
124        regex_t  subre_c;               /* Substitute RE: compiled form. */
125        char    *subre;                 /* Substitute RE: uncompiled form. */
126        size_t   subre_len;             /* Substitute RE: uncompiled length). */
127        char    *repl;                  /* Substitute replacement. */
128        size_t   repl_len;              /* Substitute replacement length.*/
129        size_t  *newl;                  /* Newline offset array. */
130        size_t   newl_len;              /* Newline array size. */
131        size_t   newl_cnt;              /* Newlines in replacement. */
132        u_int8_t c_suffix;              /* Edcompatible 'c' suffix value. */
133        u_int8_t g_suffix;              /* Edcompatible 'g' suffix value. */
134
135        OPTION   opts[O_OPTIONCOUNT];   /* Ex/vi: Options. */
136
137/*
138 * Screen flags.
139 *
140 * Editor screens.
141 */
142#define SC_EX           0x00000001      /* Ex editor. */
143#define SC_VI           0x00000002      /* Vi editor. */
144
145/*
146 * Screen formatting flags, first major, then minor.
147 *
148 * SC_SCR_EX
149 *      Ex screen, i.e. cooked mode.
150 * SC_SCR_VI
151 *      Vi screen, i.e. raw mode.
152 * SC_SCR_EXWROTE
153 *      The editor had to write on the screen behind curses' back, and we can't
154 *      let curses change anything until the user agrees, e.g. entering the
155 *      commands :!utility followed by :set.  We have to switch back into the
156 *      vi "editor" to read the user's command input, but we can't touch the
157 *      rest of the screen because it's known to be wrong.
158 * SC_SCR_REFORMAT
159 *      The expected presentation of the lines on the screen have changed,
160 *      requiring that the intended screen lines be recalculated.  Implies
161 *      SC_SCR_REDRAW.
162 * SC_SCR_REDRAW
163 *      The screen doesn't correctly represent the file; repaint it.  Note,
164 *      setting SC_SCR_REDRAW in the current window causes *all* windows to
165 *      be repainted.
166 * SC_SCR_CENTER
167 *      If the current line isn't already on the screen, center it.
168 * SC_SCR_TOP
169 *      If the current line isn't already on the screen, put it at the to@.
170 */
171#define SC_SCR_EX       0x00000004      /* Screen is in ex mode. */
172#define SC_SCR_VI       0x00000008      /* Screen is in vi mode. */
173#define SC_SCR_EXWROTE  0x00000010      /* Ex overwrite: see comment above. */
174#define SC_SCR_REFORMAT 0x00000020      /* Reformat (refresh). */
175#define SC_SCR_REDRAW   0x00000040      /* Refresh. */
176
177#define SC_SCR_CENTER   0x00000080      /* Center the line if not visible. */
178#define SC_SCR_TOP      0x00000100      /* Top the line if not visible. */
179
180/* Screen/file changes. */
181#define SC_EXIT         0x00000200      /* Exiting (not forced). */
182#define SC_EXIT_FORCE   0x00000400      /* Exiting (forced). */
183#define SC_FSWITCH      0x00000800      /* Switch underlying files. */
184#define SC_SSWITCH      0x00001000      /* Switch screens. */
185
186#define SC_ARGNOFREE    0x00002000      /* Argument list wasn't allocated. */
187#define SC_ARGRECOVER   0x00004000      /* Argument list is recovery files. */
188#define SC_AT_SET       0x00008000      /* Last at buffer set. */
189#define SC_COMEDIT      0x00010000      /* Colon command-line edit window. */
190#define SC_EX_GLOBAL    0x00020000      /* Ex: executing a global command. */
191#define SC_EX_SILENT    0x00040000      /* Ex: batch script. */
192#define SC_EX_WAIT_NO   0x00080000      /* Ex: don't wait for the user. */
193#define SC_EX_WAIT_YES  0x00100000      /* Ex:    do wait for the user. */
194#define SC_READONLY     0x00200000      /* Persistent readonly state. */
195#define SC_RE_SEARCH    0x00400000      /* Search RE has been compiled. */
196#define SC_RE_SUBST     0x00800000      /* Substitute RE has been compiled. */
197#define SC_SCRIPT       0x01000000      /* Shell script window. */
198#define SC_STATUS       0x02000000      /* Welcome message. */
199#define SC_STATUS_CNT   0x04000000      /* Welcome message plus file count. */
200#define SC_TINPUT       0x08000000      /* Doing text input. */
201#define SC_TINPUT_INFO  0x10000000      /* Doing text input on info line. */
202        u_int32_t flags;
203};
Note: See TracBrowser for help on using the repository browser.