2 * Copyright (c) 1993, 1994
3 * The Regents of the University of California. All rights reserved.
4 * Copyright (c) 1993, 1994, 1995, 1996
5 * Keith Bostic. All rights reserved.
7 * See the LICENSE file for redistribution information.
9 * $Id: gs.h,v 11.0 2012/10/17 06:34:37 zy Exp $
12 #define TEMPORARY_FILE_STRING "/tmp" /* Default temporary file name. */
17 * File reference structure (FREF). The structure contains the name of the
18 * file, along with the information that follows the name.
21 * The read-only bit follows the file name, not the file itself.
24 TAILQ_ENTRY(_fref
) q
; /* Linked list of file references. */
25 char *name
; /* File name. */
26 char *tname
; /* Backing temporary file name. */
28 recno_t lno
; /* 1-N: file cursor line. */
29 size_t cno
; /* 0-N: file cursor column. */
31 #define FR_CURSORSET 0x0001 /* If lno/cno values valid. */
32 #define FR_DONTDELETE 0x0002 /* Don't delete the temporary file. */
33 #define FR_EXNAMED 0x0004 /* Read/write renamed the file. */
34 #define FR_NAMECHANGE 0x0008 /* If the name changed. */
35 #define FR_NEWFILE 0x0010 /* File doesn't really exist yet. */
36 #define FR_RECOVER 0x0020 /* File is being recovered. */
37 #define FR_TMPEXIT 0x0040 /* Modified temporary file, no exit. */
38 #define FR_TMPFILE 0x0080 /* If file has no name. */
39 #define FR_UNLOCKED 0x0100 /* File couldn't be locked. */
43 /* Action arguments to scr_exadjust(). */
44 typedef enum { EX_TERM_CE
, EX_TERM_SCROLL
} exadj_t
;
46 /* Screen attribute arguments to scr_attr(). */
47 typedef enum { SA_ALTERNATE
, SA_INVERSE
} scr_attr_t
;
49 /* Key type arguments to scr_keyval(). */
50 typedef enum { KEY_VEOF
, KEY_VERASE
, KEY_VKILL
, KEY_VWERASE
} scr_keyval_t
;
55 * Structure that describes global state of the running program.
58 char *progname
; /* Programe name. */
60 int id
; /* Last allocated screen id. */
61 TAILQ_HEAD(_dqh
, _scr
) dq
[1]; /* Displayed screens. */
62 TAILQ_HEAD(_hqh
, _scr
) hq
[1]; /* Hidden screens. */
64 SCR
*ccl_sp
; /* Colon command-line screen. */
66 void *cl_private
; /* Curses support private area. */
68 /* File references. */
69 TAILQ_HEAD(_frefh
, _fref
) frefq
[1];
71 #define GO_COLUMNS 0 /* Global options: columns. */
72 #define GO_LINES 1 /* Global options: lines. */
73 #define GO_SECURE 2 /* Global options: secure. */
74 #define GO_TERM 3 /* Global options: terminal type. */
75 OPTION opts
[GO_TERM
+ 1];
77 nl_catd catd
; /* Message catalog descriptor. */
78 MSGH msgq
[1]; /* User message list. */
79 #define DEFAULT_NOPRINT '\1' /* Emergency non-printable character. */
80 int noprint
; /* Cached, unprintable character. */
82 char *tmp_bp
; /* Temporary buffer. */
83 size_t tmp_blen
; /* Temporary buffer size. */
86 * Ex command structures (EXCMD). Defined here because ex commands
87 * exist outside of any particular screen or file.
89 #define EXCMD_RUNNING(gp) (SLIST_FIRST((gp)->ecq)->clen != 0)
90 /* Ex command linked list. */
91 SLIST_HEAD(_excmdh
, _excmd
) ecq
[1];
92 EXCMD excmd
; /* Default ex command structure. */
93 char *if_name
; /* Current associated file. */
94 recno_t if_lno
; /* Current associated line number. */
96 char *c_option
; /* Ex initial, command-line command. */
99 FILE *tracefp
; /* Trace file pointer. */
102 EVENT
*i_event
; /* Array of input events. */
103 size_t i_nelem
; /* Number of array elements. */
104 size_t i_cnt
; /* Count of events. */
105 size_t i_next
; /* Offset of next event. */
107 CB
*dcbp
; /* Default cut buffer pointer. */
108 CB dcb_store
; /* Default cut buffer storage. */
109 SLIST_HEAD(_cuth
, _cb
) cutq
[1]; /* Linked list of cut buffers. */
111 #define MAX_BIT_SEQ 0x7f /* Max + 1 fast check character. */
112 SLIST_HEAD(_seqh
, _seq
) seqq
[1];/* Linked list of maps, abbrevs. */
113 bitstr_t
bit_decl(seqb
, MAX_BIT_SEQ
+ 1);
115 #define MAX_FAST_KEY 0xff /* Max fast check character.*/
116 #define KEY_LEN(sp, ch) \
117 (((ch) & ~MAX_FAST_KEY) == 0 ? \
118 sp->gp->cname[(unsigned char)ch].len : v_key_len(sp, ch))
119 #define KEY_NAME(sp, ch) \
120 (((ch) & ~MAX_FAST_KEY) == 0 ? \
121 sp->gp->cname[(unsigned char)ch].name : v_key_name(sp, ch))
123 char name
[MAX_CHARACTER_COLUMNS
+ 1];
125 } cname
[MAX_FAST_KEY
+ 1]; /* Fast lookup table. */
127 #define KEY_VAL(sp, ch) \
128 (((ch) & ~MAX_FAST_KEY) == 0 ? \
129 sp->gp->special_key[(unsigned char)ch] : v_key_val(sp,ch))
130 e_key_t
/* Fast lookup table. */
131 special_key
[MAX_FAST_KEY
+ 1];
134 #define G_ABBREV 0x0001 /* If have abbreviations. */
135 #define G_BELLSCHED 0x0002 /* Bell scheduled. */
136 #define G_INTERRUPTED 0x0004 /* Interrupted. */
137 #define G_RECOVER_SET 0x0008 /* Recover system initialized. */
138 #define G_SCRIPTED 0x0010 /* Ex script session. */
139 #define G_SCRWIN 0x0020 /* Scripting windows running. */
140 #define G_SNAPSHOT 0x0040 /* Always snapshot files. */
141 #define G_SRESTART 0x0080 /* Screen restarted. */
142 #define G_TMP_INUSE 0x0100 /* Temporary buffer in use. */
145 /* Screen interface functions. */
146 /* Add a string to the screen. */
147 int (*scr_addstr
)(SCR
*, const char *, size_t);
148 /* Add a string to the screen. */
149 int (*scr_waddstr
)(SCR
*, const CHAR_T
*, size_t);
150 /* Toggle a screen attribute. */
151 int (*scr_attr
)(SCR
*, scr_attr_t
, int);
152 /* Terminal baud rate. */
153 int (*scr_baud
)(SCR
*, u_long
*);
154 /* Beep/bell/flash the terminal. */
155 int (*scr_bell
)(SCR
*);
156 /* Display a busy message. */
157 void (*scr_busy
)(SCR
*, const char *, busy_t
);
159 int (*scr_child
)(SCR
*);
160 /* Clear to the end of the line. */
161 int (*scr_clrtoeol
)(SCR
*);
162 /* Return the cursor location. */
163 int (*scr_cursor
)(SCR
*, size_t *, size_t *);
165 int (*scr_deleteln
)(SCR
*);
166 /* Discard a screen. */
167 int (*scr_discard
)(SCR
*, SCR
**);
168 /* Get a keyboard event. */
169 int (*scr_event
)(SCR
*, EVENT
*, u_int32_t
, int);
170 /* Ex: screen adjustment routine. */
171 int (*scr_ex_adjust
)(SCR
*, exadj_t
);
172 int (*scr_fmap
) /* Set a function key. */
173 (SCR
*, seq_t
, CHAR_T
*, size_t, CHAR_T
*, size_t);
174 /* Get terminal key value. */
175 int (*scr_keyval
)(SCR
*, scr_keyval_t
, CHAR_T
*, int *);
177 int (*scr_insertln
)(SCR
*);
178 /* Handle an option change. */
179 int (*scr_optchange
)(SCR
*, int, char *, u_long
*);
180 /* Move the cursor. */
181 int (*scr_move
)(SCR
*, size_t, size_t);
182 /* Message or ex output. */
183 void (*scr_msg
)(SCR
*, mtype_t
, char *, size_t);
184 /* Refresh the screen. */
185 int (*scr_refresh
)(SCR
*, int);
186 /* Rename the file. */
187 int (*scr_rename
)(SCR
*, char *, int);
188 /* Reply to an event. */
189 int (*scr_reply
)(SCR
*, int, char *);
190 /* Set the screen type. */
191 int (*scr_screen
)(SCR
*, u_int32_t
);
192 /* Split the screen. */
193 int (*scr_split
)(SCR
*, SCR
*);
194 /* Suspend the editor. */
195 int (*scr_suspend
)(SCR
*, int *);
196 /* Print usage message. */
197 void (*scr_usage
)(void);