1 /* $NetBSD: ip.h,v 1.3 2013/11/27 18:25:13 christos Exp $ */
4 * Keith Bostic. All rights reserved.
6 * See the LICENSE file for redistribution information.
8 * Id: ip.h,v 8.29 2000/07/17 21:17:54 skimo Exp (Berkeley) Date: 2000/07/17 21:17:54
11 #include <sys/socket.h>
14 typedef struct ipcmsghdr
{
15 struct cmsghdr header
;
16 int __room_for_fd_with_pad
[4];
21 typedef struct _ip_private
{
22 int i_fd
; /* Input file descriptor. */
23 int o_fd
; /* Output file descriptor. */
24 int t_fd
; /* Terminal file descriptor. */
29 size_t row
; /* Current row. */
30 size_t col
; /* Current column. */
32 db_recno_t sb_total
; /* scrollbar: total lines in file. */
33 db_recno_t sb_top
; /* scrollbar: top line on screen. */
34 size_t sb_num
; /* scrollbar: number of lines on screen. */
36 size_t iblen
; /* Input buffer length. */
37 size_t iskip
; /* Returned input buffer. */
38 char ibuf
[256]; /* Input buffer. */
40 CHAR_T tbuf
[256]; /* Input keys. */
42 #define IP_IN_EX 0x0001 /* Currently running ex. */
43 #define IP_ON_ALTERNATE 0x0002 /* Alternate on. */
44 #define IP_SCR_VI_INIT 0x0004 /* Vi screen initialized. */
48 #define IPP(sp) ((IP_PRIVATE *)((sp)->wp->ip_private))
49 #define WIPP(wp) ((IP_PRIVATE *)((wp)->ip_private))
51 /* The screen line relative to a specific window. */
52 #define RLNO(sp, lno) (sp)->roff + (lno)
53 #define RCNO(sp, cno) (sp)->coff + (cno)
55 #define IPO_CODE_LEN 1 /* Length of a code value. */
56 #define IPO_INT_LEN 4 /* Length of an integer. */
58 /* A structure that can hold the information for any frame. */
59 typedef struct _ip_buf
{
60 int code
; /* Event code. */
61 const char *str1
; /* String #1. */
62 u_int32_t len1
; /* String #1 length. */
63 const char *str2
; /* String #1. */
64 u_int32_t len2
; /* String #1 length. */
65 u_int32_t val1
; /* Value #1. */
66 u_int32_t val2
; /* Value #2. */
67 u_int32_t val3
; /* Value #3. */
70 typedef int (*IPFunc
) (struct _ip_vi_win
*);
71 typedef int (*IPFunc_1
) (struct _ip_vi_win
*, u_int32_t
);
72 typedef int (*IPFunc_1a
) (struct _ip_vi_win
*, u_int32_t
, const char *, u_int32_t
);
73 typedef int (*IPFunc_a
) (struct _ip_vi_win
*, const char *, u_int32_t
);
74 typedef int (*IPFunc_ab1
) (struct _ip_vi_win
*, const char *, u_int32_t
,
75 const char *, u_int32_t
, u_int32_t
);
76 typedef int (*IPFunc_12
) (struct _ip_vi_win
*, u_int32_t
, u_int32_t
);
77 typedef int (*IPFunc_123
) (struct _ip_vi_win
*, u_int32_t
, u_int32_t
, u_int32_t
);
79 typedef int (*IPUnmarshall
) (struct _ip_vi_win
*, IP_BUF
*, IPFunc
);
81 typedef struct _ipfunlist
{
83 IPUnmarshall unmarshall
;
87 typedef struct _vipfunlist
{
92 typedef struct ip_si_operations
{
109 IPFunc_123 scrollbar
;
116 typedef struct _ip_vi IPVI
;
119 typedef struct _ip_vi_win IPVIWIN
;
122 int ifd
; /* Input file descriptor. */
123 int ofd
; /* Output file descriptor. */
130 int (*run
) __P((IPVI
*, int, char*[]));
131 int (*new_window
) __P((IPVI
*, IPVIWIN
**, int));
132 int (*close
) __P((IPVI
*));
136 int ifd
; /* Input file descriptor. */
137 int ofd
; /* Output file descriptor. */
143 int (*c_bol
) __P((IPVIWIN
*));
144 int (*c_bottom
) __P((IPVIWIN
*));
145 int (*c_del
) __P((IPVIWIN
*));
146 int (*c_eol
) __P((IPVIWIN
*));
147 int (*c_insert
) __P((IPVIWIN
*));
148 int (*c_left
) __P((IPVIWIN
*));
149 int (*c_right
) __P((IPVIWIN
*));
150 int (*c_top
) __P((IPVIWIN
*));
151 int (*c_settop
) __P((IPVIWIN
*, u_int32_t
));
153 int (*string
) __P((IPVIWIN
*, const char*, u_int32_t
));
154 int (*wq
) __P((IPVIWIN
*));
155 int (*quit
) __P((IPVIWIN
*));
156 int (*resize
) __P((IPVIWIN
*, u_int32_t
, u_int32_t
));
158 int (*input
) __P((IPVIWIN
*, int));
159 int (*close
) __P((IPVIWIN
*));
161 int (*set_ops
) __P((IPVIWIN
*, IPSIOPS
*));
165 * Screen/editor IP_CODE's.
167 * The program structure depends on the event loop being able to return
168 * IPO_EOF/IPO_ERR multiple times -- eventually enough things will end
169 * due to the events that vi will reach the command level for the screen,
170 * at which point the exit flags will be set and vi will exit.
172 * IP events sent from the screen to vi.
174 #define CODE_OOB 0 /* Illegal code. */
176 #define VI_C_BOL 1 /* Cursor to start of line. */
177 #define VI_C_BOTTOM 2 /* Cursor to bottom. */
178 #define VI_C_DEL 3 /* Cursor delete. */
179 #define VI_C_DOWN 4 /* Cursor down N lines: IPO_INT. */
180 #define VI_C_EOL 5 /* Cursor to end of line. */
181 #define VI_C_INSERT 6 /* Cursor: enter insert mode. */
182 #define VI_C_LEFT 7 /* Cursor left. */
183 #define VI_C_PGDOWN 8 /* Cursor down N pages: IPO_INT. */
184 #define VI_C_PGUP 9 /* Cursor up N lines: IPO_INT. */
185 #define VI_C_RIGHT 10 /* Cursor right. */
186 #define VI_C_SEARCH 11 /* Cursor: search: IPO_INT, IPO_STR. */
187 #define VI_C_SETTOP 12 /* Cursor: set screen top line: IPO_INT. */
188 #define VI_C_TOP 13 /* Cursor to top. */
189 #define VI_C_UP 14 /* Cursor up N lines: IPO_INT. */
190 #define VI_EDIT 15 /* Edit a file: IPO_STR. */
191 #define VI_EDITOPT 16 /* Edit option: 2 * IPO_STR, IPO_INT. */
192 #define VI_EDITSPLIT 17 /* Split to a file: IPO_STR. */
193 #define VI_EOF 18 /* End of input (NOT ^D). */
194 #define VI_ERR 19 /* Input error. */
195 #define VI_INTERRUPT 20 /* Interrupt. */
196 #define VI_MOUSE_MOVE 21 /* Mouse click move: IPO_INT, IPO_INT. */
197 #define VI_QUIT 22 /* Quit. */
198 #define VI_RESIZE 23 /* Screen resize: IPO_INT, IPO_INT. */
199 #define VI_SEL_END 24 /* Select end: IPO_INT, IPO_INT. */
200 #define VI_SEL_START 25 /* Select start: IPO_INT, IPO_INT. */
201 #define VI_SIGHUP 26 /* SIGHUP. */
202 #define VI_SIGTERM 27 /* SIGTERM. */
203 #define VI_STRING 28 /* Input string: IPO_STR. */
204 #define VI_TAG 29 /* Tag. */
205 #define VI_TAGAS 30 /* Tag to a string: IPO_STR. */
206 #define VI_TAGSPLIT 31 /* Split to a tag. */
207 #define VI_UNDO 32 /* Undo. */
208 #define VI_WQ 33 /* Write and quit. */
209 #define VI_WRITE 34 /* Write. */
210 #define VI_WRITEAS 35 /* Write as another file: IPO_STR. */
211 #define VI_FLAGS 36 /* Flags passed to nvi_create */
214 #define VI_SEARCH_EXT 0x001 /* VI_C_SEARCH: ignore case. */
215 #define VI_SEARCH_IC 0x002 /* VI_C_SEARCH: ignore case. */
216 #define VI_SEARCH_ICL 0x004 /* VI_C_SEARCH: ignore case if lower-case. */
217 #define VI_SEARCH_INCR 0x008 /* VI_C_SEARCH: incremental search. */
218 #define VI_SEARCH_LIT 0x010 /* VI_C_SEARCH: literal string. */
219 #define VI_SEARCH_REV 0x020 /* VI_C_SEARCH: reverse direction. */
220 #define VI_SEARCH_WR 0x040 /* VI_C_SEARCH: wrap at sof/eof. */
223 * IP events sent from vi to the screen.
226 #define SI_ADDSTR 1 /* Add a string: IPO_STR. */
227 #define SI_ATTRIBUTE 2 /* Set screen attribute: 2 * IPO_INT. */
228 #define SI_BELL 3 /* Beep/bell/flash the terminal. */
229 #define SI_BUSY_OFF 4 /* Display a busy message: IPO_STR. */
230 #define SI_BUSY_ON 5 /* Display a busy message: IPO_STR. */
231 #define SI_CLRTOEOL 6 /* Clear to the end of the line. */
232 #define SI_DELETELN 7 /* Delete a line. */
233 #define SI_DISCARD 8 /* Discard the screen. */
234 #define SI_EDITOPT 9 /* Edit option: 2 * IPO_STR, IPO_INT. */
235 #define SI_INSERTLN 10 /* Insert a line. */
236 #define SI_MOVE 11 /* Move the cursor: 2 * IPO_INT. */
237 #define SI_QUIT 12 /* Quit. */
238 #define SI_REDRAW 13 /* Redraw the screen. */
239 #define SI_REFRESH 14 /* Refresh the screen. */
240 #define SI_RENAME 15 /* Rename the screen: IPO_STR. */
241 #define SI_REPLY 16 /* Reply: IPO_INT (0/1), IPO_STR. */
242 #define SI_REWRITE 17 /* Rewrite a line: IPO_INT. */
243 #define SI_SCROLLBAR 18 /* Reset the scrollbar: 3 * IPO_INT. */
244 #define SI_SELECT 19 /* Select area: IPO_STR. */
245 #define SI_SPLIT 20 /* Split the screen. */
246 #define SI_EVENT_MAX 20
249 #include "ipc_extern.h"
250 #include "ip_extern.h"