Annotation of src/usr.bin/vim/vim.h, Revision 1.1.1.1
1.1 downsj 1: /* $OpenBSD$ */
2: /* vi:set ts=4 sw=4:
3: *
4: * VIM - Vi IMproved by Bram Moolenaar
5: *
6: * Do ":help uganda" in Vim to read copying and usage conditions.
7: * Do ":help credits" in Vim to see a list of people who contributed.
8: */
9:
10: /* ============ the header file puzzle (ca. 50-100 pieces) ========= */
11:
12: #ifdef HAVE_CONFIG_H /* GNU autoconf (or something else) was here */
13: # include "config.h"
14: #endif
15:
16: #ifdef __EMX__ /* hand-edited config.h for OS/2 with EMX */
17: # include "conf_os2.h"
18: #endif
19:
20: /*
21: * This is a bit of a wishlist. Currently we only have the Motif and Athena
22: * GUI.
23: */
24: #if defined(USE_GUI_MOTIF) \
25: || defined(USE_GUI_ATHENA) \
26: || defined(USE_GUI_MAC) \
27: || defined(USE_GUI_WINDOWS31) \
28: || defined(USE_GUI_WIN32) \
29: || defined(USE_GUI_OS2)
30: # ifndef USE_GUI
31: # define USE_GUI
32: # endif
33: #endif
34:
35: #include "feature.h" /* #defines for optionals and features */
36:
37: /*
38: * Find out if function definitions should include argument types
39: */
40: #ifdef AZTEC_C
41: # include <functions.h>
42: # define __ARGS(x) x
43: # define __PARMS(x) x
44: #endif
45:
46: #ifdef SASC
47: # include <clib/exec_protos.h>
48: # define __ARGS(x) x
49: # define __PARMS(x) x
50: #endif
51:
52: #ifdef _DCC
53: # include <clib/exec_protos.h>
54: # define __ARGS(x) x
55: # define __PARMS(x) x
56: #endif
57:
58: #ifdef __TURBOC__
59: # define __ARGS(x) x
60: #endif
61:
62: #if defined(UNIX) || defined(__EMX__)
63: # include "unix.h" /* bring lots of system header files */
64: #endif
65:
66: #ifdef VMS
67: # include "vms.h"
68: #endif
69:
70: #ifndef __ARGS
71: # if defined(__STDC__) || defined(__GNUC__) || defined(WIN32)
72: # define __ARGS(x) x
73: # else
74: # define __ARGS(x) ()
75: # endif
76: #endif
77:
78: /* __ARGS and __PARMS are the same thing. */
79: #ifndef __PARMS
80: # define __PARMS(x) __ARGS(x)
81: #endif
82:
83: #ifdef UNIX
84: # include "osdef.h" /* bring missing declarations in */
85: #endif
86:
87: #ifdef __EMX__
88: # define getcwd _getcwd2
89: # define chdir _chdir2
90: # undef CHECK_INODE
91: #endif
92:
93: #ifdef AMIGA
94: # include "amiga.h"
95: #endif
96:
97: #ifdef ARCHIE
98: # include "archie.h"
99: #endif
100:
101: #ifdef MSDOS
102: # include "msdos.h"
103: #endif
104:
105: #ifdef WIN32
106: # include "win32.h"
107: #endif
108:
109: #ifdef MINT
110: # include "mint.h"
111: #endif
112:
113: /*
114: * maximum length of a file name and a path (for non-unix systems)
115: */
116: #ifndef MAXNAMLEN
117: # define MAXNAMLEN 31
118: #endif
119:
120: #ifndef MAXPATHL
121: # define MAXPATHL 128 /* not too long to put name on stack */
122: #endif
123:
124: /*
125: * Shorthand for unsigned variables. Many systems, but not all, have u_char
126: * already defined, so we use char_u to avoid trouble.
127: */
128: typedef unsigned char char_u;
129: typedef unsigned short short_u;
130: typedef unsigned int int_u;
131: typedef unsigned long long_u;
132:
133: #ifndef UNIX /* For Unix this is included in unix.h */
134: #include <stdio.h>
135: #include <ctype.h>
136: #endif
137:
138: #if defined(HAVE_STRING_H)
139: # include <string.h>
140: #else
141: # ifdef HAVE_STRINGS_H
142: # include <strings.h>
143: # endif
144: #endif
145:
146: #include "ascii.h"
147: #include "keymap.h"
148: #include "term.h"
149: #include "macros.h"
150:
151: #ifdef LATTICE
152: # include <sys/types.h>
153: # include <sys/stat.h>
154: #endif
155: #ifdef _DCC
156: # include <sys/stat.h>
157: #endif
158: #if defined MSDOS || defined WIN32
159: # include <sys\stat.h>
160: #endif
161:
162: /* allow other (non-unix) systems to configure themselves now */
163: #ifndef UNIX
164: # ifdef HAVE_STAT_H
165: # include <stat.h>
166: # endif
167: # ifdef HAVE_STDLIB_H
168: # include <stdlib.h>
169: # endif
170: #endif /* NON-UNIX */
171:
172: /* ================ end of the header file puzzle =============== */
173:
174: /*
175: * flags for updateScreen()
176: * The higher the value, the higher the priority
177: */
178: #define VALID 10 /* buffer not changed */
179: #define INVERTED 20 /* redisplay inverted part */
180: #define VALID_TO_CURSCHAR 30 /* buffer at/below cursor changed */
181: #define NOT_VALID 40 /* buffer changed */
182: #define CURSUPD 50 /* buffer changed, update cursor first */
183: #define CLEAR 60 /* screen messed up, clear it */
184:
185: /*
186: * Attributes for NextScreen.
187: */
188: #define CHAR_NORMAL 0
189: #define CHAR_INVERT 1
190: #define CHAR_UNDERL 2
191: #define CHAR_BOLD 3
192: #define CHAR_STDOUT 4
193: #define CHAR_ITALIC 5
194:
195: /*
196: * values for State
197: *
198: * The lowest four bits are used to distinguish normal/visual/cmdline/
199: * insert+replace mode. This is used for mapping. If none of these bits are
200: * set, no mapping is done.
201: * The upper four bits are used to distinguish between other states.
202: */
203: #define NORMAL 0x01
204: #define VISUAL 0x02
205: #define CMDLINE 0x04
206: #define INSERT 0x08
207: #define NORMAL_BUSY 0x11 /* busy interpreting a command */
208: #define REPLACE 0x28 /* replace mode */
209: #define HITRETURN 0x61 /* waiting for a return */
210: #define ASKMORE 0x70 /* Asking if you want --more-- */
211: #define SETWSIZE 0x80 /* window size has changed */
212: #define ABBREV 0x90 /* abbreviation instead of mapping */
213: #define EXTERNCMD 0xa0 /* executing an external command */
214:
215: /* directions */
216: #define FORWARD 1
217: #define BACKWARD (-1)
218: #define BOTH_DIRECTIONS 2
219:
220: /* return values for functions */
221: #define OK 1
222: #define FAIL 0
223:
224: /*
225: * values for command line completion
226: */
227: #define CONTEXT_UNKNOWN (-2)
228: #define EXPAND_UNSUCCESSFUL (-1)
229: #define EXPAND_NOTHING 0
230: #define EXPAND_COMMANDS 1
231: #define EXPAND_FILES 2
232: #define EXPAND_DIRECTORIES 3
233: #define EXPAND_SETTINGS 4
234: #define EXPAND_BOOL_SETTINGS 5
235: #define EXPAND_TAGS 6
236: #define EXPAND_OLD_SETTING 7
237: #define EXPAND_HELP 8
238: #define EXPAND_BUFFERS 9
239: #define EXPAND_EVENTS 10
240: #define EXPAND_MENUS 11
241:
242: /* Values for nextwild() and ExpandOne(). See ExpandOne() for meaning. */
243: #define WILD_FREE 1
244: #define WILD_EXPAND_FREE 2
245: #define WILD_EXPAND_KEEP 3
246: #define WILD_NEXT 4
247: #define WILD_PREV 5
248: #define WILD_ALL 6
249: #define WILD_LONGEST 7
250:
251: #define WILD_LIST_NOTFOUND 1
252: #define WILD_HOME_REPLACE 2
253:
254: /* Values for the find_pattern_in_path() function args 'type' and 'action': */
255: #define FIND_ANY 1
256: #define FIND_DEFINE 2
257: #define CHECK_PATH 3
258:
259: #define ACTION_SHOW 1
260: #define ACTION_GOTO 2
261: #define ACTION_SPLIT 3
262: #define ACTION_SHOW_ALL 4
263: #ifdef INSERT_EXPAND
264: # define ACTION_EXPAND 5
265: #endif
266:
267: /* Values for 'options' argument in do_search() and searchit() */
268: #define SEARCH_REV 0x01 /* go in reverse of previous dir. */
269: #define SEARCH_ECHO 0x02 /* echo the search command and handle options */
270: #define SEARCH_MSG 0x0c /* give messages (yes, it's not 0x04) */
271: #define SEARCH_NFMSG 0x08 /* give all messages except not found */
272: #define SEARCH_OPT 0x10 /* interpret optional flags */
273: #define SEARCH_HIS 0x20 /* put search pattern in history */
274: #define SEARCH_END 0x40 /* put cursor at end of match */
275: #define SEARCH_NOOF 0x80 /* don't add offset to position */
276: #define SEARCH_START 0x100 /* start search without col offset */
277: #define SEARCH_MARK 0x200 /* set previous context mark */
278: #define SEARCH_KEEP 0x400 /* keep previous search pattern */
279:
280: /* Values for find_ident_under_cursor() */
281: #define FIND_IDENT 1 /* find identifier (word) */
282: #define FIND_STRING 2 /* find any string (WORD) */
283:
284: /* Values for get_file_name_in_path() */
285: #define FNAME_MESS 1 /* give error message */
286: #define FNAME_EXP 2 /* expand to path */
287: #define FNAME_HYP 4 /* check for hypertext link */
288:
289: /* Values for buflist_getfile() */
290: #define GETF_SETMARK 0x01 /* set pcmark before jumping */
291: #define GETF_ALT 0x02 /* jumping to alternate file (not buf num) */
292:
293: /* Values for in_indentkeys() */
294: #define KEY_OPEN_FORW 0x101
295: #define KEY_OPEN_BACK 0x102
296:
297: /* Values for call_shell() second argument */
298: #define SHELL_FILTER 1 /* filtering text */
299: #define SHELL_EXPAND 2 /* expanding wildcards */
300: #define SHELL_COOKED 4 /* set term to cooked mode */
301:
302: /* Values for change_indent() */
303: #define INDENT_SET 1 /* set indent */
304: #define INDENT_INC 2 /* increase indent */
305: #define INDENT_DEC 3 /* decrease indent */
306:
307: /* Values for flags argument for findmatchlimit() */
308: #define FM_BACKWARD 0x01 /* search backwards */
309: #define FM_FORWARD 0x02 /* search forwards */
310: #define FM_BLOCKSTOP 0x04 /* stop at start/end of block */
311: #define FM_SKIPCOMM 0x08 /* skip comments */
312:
313: /* Values for action argument for do_buffer() */
314: #define DOBUF_GOTO 0 /* go to specified buffer */
315: #define DOBUF_SPLIT 1 /* split window and go to specified buffer */
316: #define DOBUF_UNLOAD 2 /* unload specified buffer(s) */
317: #define DOBUF_DEL 3 /* delete specified buffer(s) */
318:
319: /* Values for start argument for do_buffer() */
320: #define DOBUF_CURRENT 0 /* "count" buffer from current buffer */
321: #define DOBUF_FIRST 1 /* "count" buffer from first buffer */
322: #define DOBUF_LAST 2 /* "count" buffer from last buffer */
323: #define DOBUF_MOD 3 /* "count" mod. buffer from current buffer */
324:
325: /* Values for sub_cmd and which_pat argument for myregcomp() */
326: /* Also used for which_pat argument for searchit() */
327: #define RE_SEARCH 0 /* save/use pat in/from search_pattern */
328: #define RE_SUBST 1 /* save/use pat in/from subst_pattern */
329: #define RE_BOTH 2 /* save pat in both patterns */
330: #define RE_LAST 2 /* use last used pattern if "pat" is NULL */
331:
332: /* Return values for fullpathcmp() */
333: #define FPC_SAME 1 /* both exist and are the same file. */
334: #define FPC_DIFF 2 /* both exist and are different files. */
335: #define FPC_NOTX 3 /* both don't exist. */
336: #define FPC_DIFFX 4 /* one of them doesn't exist. */
337:
338: /*
339: * Events for autocommands.
340: */
341: enum auto_events
342: {
343: EVENT_BUFENTER = 0, /* after entering a buffer */
344: EVENT_BUFLEAVE, /* before leaving a buffer */
345: EVENT_BUFNEWFILE, /* when creating a buffer for a new file */
346: EVENT_BUFREADPOST, /* after reading a buffer */
347: EVENT_BUFREADPRE, /* before reading a buffer */
348: EVENT_BUFWRITEPOST, /* after writing a buffer */
349: EVENT_BUFWRITEPRE, /* before writing a buffer */
350: EVENT_FILEAPPENDPOST, /* after appending to a file */
351: EVENT_FILEAPPENDPRE, /* before appending to a file */
352: EVENT_FILEREADPOST, /* after reading a file */
353: EVENT_FILEREADPRE, /* before reading a file */
354: EVENT_FILEWRITEPOST, /* after writing a file */
355: EVENT_FILEWRITEPRE, /* before writing a file */
356: EVENT_FILTERREADPOST, /* after reading from a filter */
357: EVENT_FILTERREADPRE, /* before reading from a filter */
358: EVENT_FILTERWRITEPOST, /* after writing to a filter */
359: EVENT_FILTERWRITEPRE, /* before writing to a filter */
360: EVENT_VIMLEAVE, /* before exiting Vim */
361: EVENT_WINENTER, /* after entering a window */
362: EVENT_WINLEAVE, /* before leaving a window */
363: NUM_EVENTS /* MUST be the last one */
364: };
365:
366: /*
367: * Boolean constants
368: */
369: #ifndef TRUE
370: # define FALSE 0 /* note: this is an int, not a long! */
371: # define TRUE 1
372: #endif
373:
374: #define MAYBE 2 /* for beginline() and the 'sol' option */
375:
376: /* May be returned by add_new_completion(): */
377: #define RET_ERROR (-1)
378:
379: /*
380: * jump_to_mouse() returns one of these values, possibly with
381: * CURSOR_MOVED added
382: */
383: #define IN_UNKNOWN 1
384: #define IN_BUFFER 2
385: #define IN_STATUS_LINE 3 /* Or in command line */
386: #define CURSOR_MOVED 0x100
387:
388: /* flags for jump_to_mouse() */
389: #define MOUSE_FOCUS 0x1 /* if used, need to stay in this window */
390: #define MOUSE_MAY_VIS 0x2 /* if used, may set visual mode */
391: #define MOUSE_DID_MOVE 0x4 /* if used, only act when mouse has moved */
392: #define MOUSE_SETPOS 0x8 /* if used, only set current mouse position */
393:
394: /*
395: * Minimum screen size
396: */
397: #define MIN_COLUMNS 12 /* minimal columns for screen */
398: #define MIN_ROWS 1 /* minimal rows for one window */
399: #define STATUS_HEIGHT 1 /* height of a status line under a window */
400:
401: /*
402: * Buffer sizes
403: */
404: #ifndef CMDBUFFSIZE
405: # define CMDBUFFSIZE 256 /* size of the command processing buffer */
406: #endif
407:
408: #define LSIZE 512 /* max. size of a line in the tags file */
409:
410: #define IOSIZE (1024+1) /* file i/o and sprintf buffer size */
411: #define MSG_BUF_LEN 80 /* length of buffer for small messages */
412:
413: #define TERMBUFSIZE 1024
414:
415: #if defined(AMIGA) || defined(__linux__)
416: # define TBUFSZ 2048 /* buffer size for termcap entry */
417: #else
418: # define TBUFSZ 1024 /* buffer size for termcap entry */
419: #endif
420:
421: /*
422: * Maximum length of key sequence to be mapped.
423: * Must be able to hold an Amiga resize report.
424: */
425: #define MAXMAPLEN 50
426:
427: #ifdef BINARY_FILE_IO
428: # define WRITEBIN "wb" /* no CR-LF translation */
429: # define READBIN "rb"
430: # define APPENDBIN "ab"
431: #else
432: # define WRITEBIN "w"
433: # define READBIN "r"
434: # define APPENDBIN "a"
435: #endif
436:
437: /*
438: * EMX doesn't have a global way of making open() use binary I/O.
439: * Use O_BINARY for all open() calls.
440: */
441: #ifdef __EMX__
442: # define O_EXTRA O_BINARY
443: #else
444: # define O_EXTRA 0
445: #endif
446:
447: #define CHANGED set_Changed()
448: #define UNCHANGED(buf) unset_Changed(buf)
449:
450: /*
451: * defines to avoid typecasts from (char_u *) to (char *) and back
452: * (vim_strchr() and vim_strrchr() are now in alloc.c)
453: */
454: #define STRLEN(s) strlen((char *)(s))
455: #define STRCPY(d, s) strcpy((char *)(d), (char *)(s))
456: #define STRNCPY(d, s, n) strncpy((char *)(d), (char *)(s), (size_t)(n))
457: #define STRCMP(d, s) strcmp((char *)(d), (char *)(s))
458: #define STRNCMP(d, s, n) strncmp((char *)(d), (char *)(s), (size_t)(n))
459: #define STRCAT(d, s) strcat((char *)(d), (char *)(s))
460: #define STRNCAT(d, s, n) strncat((char *)(d), (char *)(s), (size_t)(n))
461:
462: #define MSG(s) msg((char_u *)(s))
463: #define EMSG(s) emsg((char_u *)(s))
464: #define EMSG2(s, p) emsg2((char_u *)(s), (char_u *)(p))
465: #define EMSGN(s, n) emsgn((char_u *)(s), (long)(n))
466: #define OUTSTR(s) outstr((char_u *)(s))
467: #define OUTSTRN(s) outstrn((char_u *)(s))
468: #define MSG_OUTSTR(s) msg_outstr((char_u *)(s))
469:
470: typedef long linenr_t; /* line number type */
471: typedef unsigned colnr_t; /* column number type */
472:
473: #define MAXLNUM (0x7fffffff) /* maximum (invalid) line number */
474:
475: #if SIZEOF_INT >= 4
476: # define MAXCOL (0x7fffffff) /* maximum column number, 31 bits */
477: #else
478: # define MAXCOL (0x7fff) /* maximum column number, 15 bits */
479: #endif
480:
481: #define SHOWCMD_COLS 10 /* columns needed by shown command */
482:
483: /*
484: * Include a prototype for vim_memmove(), it may not be in alloc.pro.
485: */
486: #ifdef VIM_MEMMOVE
487: void vim_memmove __ARGS((void *, void *, size_t));
488: #else
489: # ifndef vim_memmove
490: # define vim_memmove(to, from, len) memmove(to, from, len)
491: # endif
492: #endif
493:
494: /*
495: * For the Amiga we use a version of getenv that does local variables under 2.0
496: * For Win32 and MSDOS we also check $HOME when $VIM is used.
497: */
498: #if !defined(AMIGA) && !defined(WIN32) && !defined(MSDOS) && !defined(VMS)
499: # define vim_getenv(x) (char_u *)getenv((char *)x)
500: #endif
501:
502: /*
503: * fnamecmp() is used to compare filenames.
504: * On some systems case in a filename does not matter, on others it does.
505: * (this does not account for maximum name lengths and things like "../dir",
506: * thus it is not 100% accurate!)
507: */
508: #ifdef CASE_INSENSITIVE_FILENAME
509: # define fnamecmp(x, y) stricmp((char *)(x), (char *)(y))
510: # define fnamencmp(x, y, n) strnicmp((char *)(x), (char *)(y), (size_t)(n))
511: #else
512: # define fnamecmp(x, y) strcmp((char *)(x), (char *)(y))
513: # define fnamencmp(x, y, n) strncmp((char *)(x), (char *)(y), (size_t)(n))
514: #endif
515:
516: #ifdef HAVE_MEMSET
517: # define vim_memset(ptr, c, size) memset((ptr), (c), (size))
518: #else
519: void *vim_memset __ARGS((void *, int, size_t));
520: #endif
521:
522: /* for MS-DOS and Win32: use chdir() that also changes the default drive */
523: #ifdef USE_VIM_CHDIR
524: int vim_chdir __ARGS((char *));
525: #else
526: # define vim_chdir chdir
527: #endif
528:
529: /*
530: * vim_iswhite() is used for "^" and the like. It differs from isspace()
531: * because it doesn't include <CR> and <LF> and the like.
532: */
533: #define vim_iswhite(x) ((x) == ' ' || (x) == '\t')
534:
535: /* Note that gui.h is included by structs.h */
536:
537: #include "structs.h" /* file that defines many structures */