1 /* $NetBSD: ip.h,v 1.3 2013/11/27 18:25:13 christos Exp $ */ 2 /*- 3 * Copyright (c) 1996 4 * Keith Bostic. All rights reserved. 5 * 6 * See the LICENSE file for redistribution information. 7 * 8 * Id: ip.h,v 8.29 2000/07/17 21:17:54 skimo Exp (Berkeley) Date: 2000/07/17 21:17:54 9 */ 10 11 #include <sys/socket.h> 12 #include "ipc_def.h" 13 14 typedef struct ipcmsghdr { 15 struct cmsghdr header; 16 int __room_for_fd_with_pad[4]; 17 } IPCMSGHDR; 18 19 struct _ip_vi_win; 20 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. */ 25 26 int argc; 27 char **argv; 28 29 size_t row; /* Current row. */ 30 size_t col; /* Current column. */ 31 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. */ 35 36 size_t iblen; /* Input buffer length. */ 37 size_t iskip; /* Returned input buffer. */ 38 char ibuf[256]; /* Input buffer. */ 39 40 CHAR_T tbuf[256]; /* Input keys. */ 41 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. */ 45 u_int32_t flags; 46 } IP_PRIVATE; 47 48 #define IPP(sp) ((IP_PRIVATE *)((sp)->wp->ip_private)) 49 #define WIPP(wp) ((IP_PRIVATE *)((wp)->ip_private)) 50 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) 54 55 #define IPO_CODE_LEN 1 /* Length of a code value. */ 56 #define IPO_INT_LEN 4 /* Length of an integer. */ 57 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. */ 68 } IP_BUF; 69 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); 78 79 typedef int (*IPUnmarshall) (struct _ip_vi_win *, IP_BUF *, IPFunc); 80 81 typedef struct _ipfunlist { 82 const char *format; 83 IPUnmarshall unmarshall; 84 size_t offset; 85 } IPFUNLIST; 86 87 typedef struct _vipfunlist { 88 const char *format; 89 e_event_t e_event; 90 } VIPFUNLIST; 91 92 typedef struct ip_si_operations { 93 IPFunc_a addstr; 94 IPFunc_12 attribute; 95 IPFunc bell; 96 IPFunc busy_off; 97 IPFunc_a busy_on; 98 IPFunc clrtoeol; 99 IPFunc deleteln; 100 IPFunc discard; 101 IPFunc_ab1 editopt; 102 IPFunc insertln; 103 IPFunc_12 move; 104 IPFunc quit; 105 IPFunc redraw; 106 IPFunc refresh; 107 IPFunc_a rename; 108 IPFunc_1 rewrite; 109 IPFunc_123 scrollbar; 110 IPFunc_a select; 111 IPFunc split; 112 IPFunc_a waddstr; 113 } IPSIOPS; 114 115 struct _ip_vi; 116 typedef struct _ip_vi IPVI; 117 118 struct _ip_vi_win; 119 typedef struct _ip_vi_win IPVIWIN; 120 121 struct _ip_vi { 122 int ifd; /* Input file descriptor. */ 123 int ofd; /* Output file descriptor. */ 124 pid_t pid; 125 126 void *private_data; 127 128 u_int32_t flags; 129 130 int (*run) __P((IPVI*, int, char*[])); 131 int (*new_window) __P((IPVI *, IPVIWIN **, int)); 132 int (*close) __P((IPVI*)); 133 }; 134 135 struct _ip_vi_win { 136 int ifd; /* Input file descriptor. */ 137 int ofd; /* Output file descriptor. */ 138 139 void *private_data; 140 141 IPSIOPS *si_ops; 142 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)); 152 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)); 157 158 int (*input) __P((IPVIWIN*, int)); 159 int (*close) __P((IPVIWIN*)); 160 161 int (*set_ops) __P((IPVIWIN*, IPSIOPS*)); 162 }; 163 164 /* 165 * Screen/editor IP_CODE's. 166 * 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. 171 * 172 * IP events sent from the screen to vi. 173 */ 174 #define CODE_OOB 0 /* Illegal code. */ 175 #if 0 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 */ 212 #endif 213 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. */ 221 222 /* 223 * IP events sent from vi to the screen. 224 */ 225 #if 0 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 247 #endif 248 249 #include "ipc_extern.h" 250 #include "ip_extern.h" 251