vim.h
上传用户:gddssl
上传日期:2007-01-06
资源大小:1003k
文件大小:29k
源码类别:

编辑器/阅读器

开发平台:

DOS

  1. /* vi:set ts=8 sts=4 sw=4:
  2.  *
  3.  * VIM - Vi IMproved by Bram Moolenaar
  4.  *
  5.  * Do ":help uganda"  in Vim to read copying and usage conditions.
  6.  * Do ":help credits" in Vim to see a list of people who contributed.
  7.  */
  8. #ifndef VIM__H
  9. # define VIM__H
  10. /* use fastcall for Borland, when compiling for Win32 (not for DOS16) */
  11. #if defined(__BORLANDC__) && defined(WIN32) && !defined(DEBUG)
  12. # pragma option -pr
  13. #endif
  14. /* ============ the header file puzzle (ca. 50-100 pieces) ========= */
  15. #ifdef HAVE_CONFIG_H /* GNU autoconf (or something else) was here */
  16. # include "config.h"
  17. # define HAVE_PATHDEF
  18. #endif
  19. #ifdef __EMX__ /* hand-edited config.h for OS/2 with EMX */
  20. # include "os_os2_cfg.h"
  21. #endif
  22. /*
  23.  * This is a bit of a wishlist.  Currently we only have a few GUIs.
  24.  */
  25. #if defined macintosh
  26. # define USE_GUI_MAC     /* mandatory */
  27. #endif
  28. #if defined(USE_GUI_MOTIF) 
  29.     || defined(USE_GUI_ATHENA) 
  30.     || defined(USE_GUI_MAC) 
  31.     || defined(USE_GUI_WIN16) 
  32.     || defined(USE_GUI_WIN32) 
  33.     || defined(USE_GUI_OS2) 
  34.     || defined(USE_GUI_BEOS) 
  35.     || defined(USE_GUI_AMIGA)
  36. # ifndef USE_GUI
  37. #  define USE_GUI
  38. # endif
  39. #endif
  40. /*
  41.  * NextStep has a problem with configure, undefine a few things:
  42.  */
  43. #ifdef NeXT
  44. # undef HAVE_UTIME
  45. # undef HAVE_SYS_UTSNAME_H
  46. #endif
  47. #include "feature.h" /* #defines for optionals and features */
  48. /*
  49.  * Find out if function definitions should include argument types
  50.  */
  51. #ifdef AZTEC_C
  52. # include <functions.h>
  53. # define __ARGS(x)  x
  54. #endif
  55. #ifdef SASC
  56. # include <clib/exec_protos.h>
  57. # define __ARGS(x)  x
  58. #endif
  59. #ifdef _DCC
  60. # include <clib/exec_protos.h>
  61. # define __ARGS(x)  x
  62. #endif
  63. #ifdef __TURBOC__
  64. # define __ARGS(x) x
  65. #endif
  66. #ifdef __BEOS__
  67. # include "os_beos.h"
  68. # define __ARGS(x)  x
  69. #endif
  70. #if defined(UNIX) || defined(__EMX__)
  71. # include "os_unix.h"     /* bring lots of system header files */
  72. #endif
  73. #ifdef VMS
  74. # include "os_vms.h"
  75. #endif
  76. #ifndef __ARGS
  77. # if defined(__STDC__) || defined(__GNUC__) || defined(WIN32)
  78. #  define __ARGS(x) x
  79. # else
  80. #  define __ARGS(x) ()
  81. # endif
  82. #endif
  83. /* __ARGS and __PARMS are the same thing. */
  84. #ifndef __PARMS
  85. # define __PARMS(x) __ARGS(x)
  86. #endif
  87. #ifdef UNIX
  88. # include "osdef.h" /* bring missing declarations in */
  89. #endif
  90. #ifdef __EMX__
  91. # define    getcwd  _getcwd2
  92. # define    chdir   _chdir2
  93. # undef     CHECK_INODE
  94. #endif
  95. #ifdef AMIGA
  96. # include "os_amiga.h"
  97. #endif
  98. #ifdef MSDOS
  99. # include "os_msdos.h"
  100. #endif
  101. #ifdef WIN32
  102. # include "os_win32.h"
  103. #endif
  104. #ifdef __MINT__
  105. # include "os_mint.h"
  106. #endif
  107. #ifdef macintosh
  108. # include "os_mac.h"
  109. #endif
  110. #ifdef RISCOS
  111. # include "os_riscos.h"
  112. #endif
  113. /*
  114.  * Maximum length of a path (for non-unix systems) Make it a bit long, to stay
  115.  * on the safe side.  But not too long to put on the stack.
  116.  */
  117. #ifndef MAXPATHL
  118. # ifdef MAXPATHLEN
  119. #  define MAXPATHL  MAXPATHLEN
  120. # else
  121. #  define MAXPATHL  256
  122. # endif
  123. #endif
  124. #define NUMBUFLEN 30     /* length of a buffer to store a number in ASCII */
  125. /*
  126.  * Shorthand for unsigned variables. Many systems, but not all, have u_char
  127.  * already defined, so we use char_u to avoid trouble.
  128.  */
  129. typedef unsigned char char_u;
  130. typedef unsigned short short_u;
  131. typedef unsigned int int_u;
  132. typedef unsigned long long_u;
  133. #ifndef UNIX     /* For Unix this is included in os_unix.h */
  134. #include <stdio.h>
  135. #include <ctype.h>
  136. #endif
  137. #if defined(HAVE_STRING_H)
  138. # include <string.h>
  139. #else
  140. # ifdef HAVE_STRINGS_H
  141. #  include <strings.h>
  142. # endif
  143. #endif
  144. #include "ascii.h"
  145. #include "keymap.h"
  146. #include "term.h"
  147. #include "macros.h"
  148. #ifdef LATTICE
  149. # include <sys/types.h>
  150. # include <sys/stat.h>
  151. #endif
  152. #ifdef _DCC
  153. # include <sys/stat.h>
  154. #endif
  155. #if defined MSDOS  ||  defined WIN32
  156. # include <sys/stat.h>
  157. #endif
  158. /* allow other (non-unix) systems to configure themselves now */
  159. #ifndef UNIX
  160. # ifdef HAVE_STAT_H
  161. #  include <stat.h>
  162. # endif
  163. # ifdef HAVE_STDLIB_H
  164. #  include <stdlib.h>
  165. # endif
  166. #endif /* NON-UNIX */
  167. /* ================ end of the header file puzzle =============== */
  168. /*
  169.  * flags for update_screen()
  170.  * The higher the value, the higher the priority
  171.  */
  172. #define VALID 10  /* buffer not changed */
  173. #define INVERTED 20  /* redisplay inverted part */
  174. #define VALID_TO_CURSCHAR 30  /* line at/below cursor changed */
  175. #define VALID_BEF_CURSCHAR 35  /* line just above cursor changed */
  176. #define NOT_VALID 40  /* buffer changed somewhere */
  177. #define CLEAR 50  /* screen messed up, clear it */
  178. /*
  179.  * Hints used to optimize screen updating.
  180.  */
  181. #define HINT_NONE 0     /* no current hint */
  182. #define HINT_DEL_CHAR 1     /* delete character */
  183. #define HINT_INS_CHAR 2     /* insert character */
  184. /*
  185.  * Terminal highlighting attribute bits.
  186.  * Attibutes above HL_ALL are used for syntax highlighting.
  187.  */
  188. #define HL_NORMAL 0x00
  189. #define HL_INVERSE 0x01
  190. #define HL_BOLD 0x02
  191. #define HL_ITALIC 0x04
  192. #define HL_UNDERLINE 0x08
  193. #define HL_STANDOUT 0x10
  194. #define HL_ALL 0x1f
  195. /*
  196.  * values for State
  197.  *
  198.  * The lower byte is used to distinguish normal/visual/op_pending and 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 byte is used to distinguish between other states.
  202.  */
  203. #define NORMAL 0x01 /* Normal mode, command expected */
  204. #define VISUAL 0x02 /* Visual mode - use get_real_state() */
  205. #define OP_PENDING 0x04 /* Normal mode, operator is pending - use
  206.    get_real_state() */
  207. #define CMDLINE 0x08 /* Editing command line */
  208. #define INSERT 0x10 /* Insert mode */
  209. #define NORMAL_BUSY (0x100 + NORMAL) /* Normal mode, busy with a command */
  210. #define REPLACE (0x200 + INSERT) /* Replace mode */
  211. #define HITRETURN (0x600 + NORMAL) /* waiting for return or command */
  212. #define ASKMORE 0x700 /* Asking if you want --more-- */
  213. #define SETWSIZE 0x800 /* window size has changed */
  214. #define ABBREV 0x900 /* abbreviation instead of mapping */
  215. #define EXTERNCMD 0xa00 /* executing an external command */
  216. #define SHOWMATCH (0xb00 + INSERT) /* show matching paren */
  217. #define CONFIRM 0xc00 /* ":confirm" prompt */
  218. /* directions */
  219. #define FORWARD 1
  220. #define BACKWARD (-1)
  221. #define BOTH_DIRECTIONS 2
  222. /* return values for functions */
  223. #define OK 1
  224. #define FAIL 0
  225. /* flags for b_flags */
  226. #define BF_RECOVERED 1   /* buffer has been recovered */
  227. #define BF_CHECK_RO 2   /* need to check readonly when loading
  228.        file into buffer (set by ":e", may be
  229.        reset by ":buf" */
  230. #define BF_NEVERLOADED 4   /* file has never been loaded into buffer,
  231.        many variables still need to be set */
  232. /*
  233.  * values for command line completion
  234.  */
  235. #define CONTEXT_UNKNOWN (-2)
  236. #define EXPAND_UNSUCCESSFUL (-1)
  237. #define EXPAND_NOTHING 0
  238. #define EXPAND_COMMANDS 1
  239. #define EXPAND_FILES 2
  240. #define EXPAND_DIRECTORIES 3
  241. #define EXPAND_SETTINGS 4
  242. #define EXPAND_BOOL_SETTINGS 5
  243. #define EXPAND_TAGS 6
  244. #define EXPAND_OLD_SETTING 7
  245. #define EXPAND_HELP 8
  246. #define EXPAND_BUFFERS 9
  247. #define EXPAND_EVENTS 10
  248. #define EXPAND_MENUS 11
  249. #define EXPAND_SYNTAX 12
  250. #define EXPAND_HIGHLIGHT 13
  251. #define EXPAND_AUGROUP 14
  252. #define EXPAND_USER_VARS 15
  253. /* Values for nextwild() and ExpandOne().  See ExpandOne() for meaning. */
  254. #define WILD_FREE 1
  255. #define WILD_EXPAND_FREE 2
  256. #define WILD_EXPAND_KEEP 3
  257. #define WILD_NEXT 4
  258. #define WILD_PREV 5
  259. #define WILD_ALL 6
  260. #define WILD_LONGEST 7
  261. #define WILD_LIST_NOTFOUND 1
  262. #define WILD_HOME_REPLACE 2
  263. #define WILD_USE_NL 4 /* separate names with 'n' */
  264. #define WILD_NO_BEEP 8 /* don't beep for multiple matches */
  265. /* Flags for expand_wildcards() */
  266. #define EW_DIR 1 /* include directory names */
  267. #define EW_FILE 2 /* include file names */
  268. #define EW_NOTFOUND 4 /* include not found names */
  269. #ifdef NO_EXPANDPATH
  270. # define gen_expand_wildcards mch_expand_wildcards
  271. #endif
  272. /* Values for the find_pattern_in_path() function args 'type' and 'action': */
  273. #define FIND_ANY 1
  274. #define FIND_DEFINE 2
  275. #define CHECK_PATH 3
  276. #define ACTION_SHOW 1
  277. #define ACTION_GOTO 2
  278. #define ACTION_SPLIT 3
  279. #define ACTION_SHOW_ALL 4
  280. #ifdef INSERT_EXPAND
  281. # define ACTION_EXPAND 5
  282. #endif
  283. /* Values for 'options' argument in do_search() and searchit() */
  284. #define SEARCH_REV    0x01  /* go in reverse of previous dir. */
  285. #define SEARCH_ECHO   0x02  /* echo the search command and handle options */
  286. #define SEARCH_MSG    0x0c  /* give messages (yes, it's not 0x04) */
  287. #define SEARCH_NFMSG  0x08  /* give all messages except not found */
  288. #define SEARCH_OPT    0x10  /* interpret optional flags */
  289. #define SEARCH_HIS    0x20  /* put search pattern in history */
  290. #define SEARCH_END    0x40  /* put cursor at end of match */
  291. #define SEARCH_NOOF   0x80  /* don't add offset to position */
  292. #define SEARCH_START 0x100  /* start search without col offset */
  293. #define SEARCH_MARK  0x200  /* set previous context mark */
  294. #define SEARCH_KEEP  0x400  /* keep previous search pattern */
  295. /* Values for find_ident_under_cursor() */
  296. #define FIND_IDENT 1 /* find identifier (word) */
  297. #define FIND_STRING 2 /* find any string (WORD) */
  298. /* Values for get_file_name_in_path() */
  299. #define FNAME_MESS 1 /* give error message */
  300. #define FNAME_EXP 2 /* expand to path */
  301. #define FNAME_HYP 4 /* check for hypertext link */
  302. /* Values for buflist_getfile() */
  303. #define GETF_SETMARK 0x01 /* set pcmark before jumping */
  304. #define GETF_ALT 0x02 /* jumping to alternate file (not buf num) */
  305. /* Values for in_indentkeys() */
  306. #define KEY_OPEN_FORW 0x101
  307. #define KEY_OPEN_BACK 0x102
  308. /* Values for mch_call_shell() second argument */
  309. #define SHELL_FILTER 1 /* filtering text */
  310. #define SHELL_EXPAND 2 /* expanding wildcards */
  311. #define SHELL_COOKED 4 /* set term to cooked mode */
  312. #define SHELL_DOOUT 8 /* redirecting output */
  313. /* Values for readfile() flags */
  314. #define READ_NEW 0x01 /* read a file into a new buffer */
  315. #define READ_FILTER 0x02 /* read filter output */
  316. #define READ_STDIN 0x04 /* read from stdin */
  317. /* Values for change_indent() */
  318. #define INDENT_SET 1 /* set indent */
  319. #define INDENT_INC 2 /* increase indent */
  320. #define INDENT_DEC 3 /* decrease indent */
  321. /* Values for flags argument for findmatchlimit() */
  322. #define FM_BACKWARD 0x01 /* search backwards */
  323. #define FM_FORWARD 0x02 /* search forwards */
  324. #define FM_BLOCKSTOP 0x04 /* stop at start/end of block */
  325. #define FM_SKIPCOMM 0x08 /* skip comments */
  326. /* Values for action argument for do_buffer() */
  327. #define DOBUF_GOTO 0 /* go to specified buffer */
  328. #define DOBUF_SPLIT 1 /* split window and go to specified buffer */
  329. #define DOBUF_UNLOAD 2 /* unload specified buffer(s) */
  330. #define DOBUF_DEL 3 /* delete specified buffer(s) */
  331. /* Values for start argument for do_buffer() */
  332. #define DOBUF_CURRENT 0 /* "count" buffer from current buffer */
  333. #define DOBUF_FIRST 1 /* "count" buffer from first buffer */
  334. #define DOBUF_LAST 2 /* "count" buffer from last buffer */
  335. #define DOBUF_MOD 3 /* "count" mod. buffer from current buffer */
  336. /* Values for sub_cmd and which_pat argument for search_regcomp() */
  337. /* Also used for which_pat argument for searchit() */
  338. #define RE_SEARCH   0 /* save/use pat in/from search_pattern */
  339. #define RE_SUBST    1 /* save/use pat in/from subst_pattern */
  340. #define RE_BOTH     2 /* save pat in both patterns */
  341. #define RE_LAST     2 /* use last used pattern if "pat" is NULL */
  342. /* Return values for fullpathcmp() */
  343. /* Note: can use (fullpathcmp() & FPC_SAME) to check for equal files */
  344. #define FPC_SAME 1 /* both exist and are the same file. */
  345. #define FPC_DIFF 2 /* both exist and are different files. */
  346. #define FPC_NOTX 4 /* both don't exist. */
  347. #define FPC_DIFFX 6 /* one of them doesn't exist. */
  348. #define FPC_SAMEX 7 /* both don't exist and file names are same. */
  349. /* flags for do_ecmd() */
  350. #define ECMD_HIDE 0x01 /* don't free the current buffer */
  351. #define ECMD_SET_HELP 0x02 /* set b_help flag of (new) buffer before
  352.    opening file */
  353. #define ECMD_OLDBUF 0x04 /* use existing buffer if it exists */
  354. #define ECMD_FORCEIT 0x08 /* ! used in Ex command */
  355. #define ECMD_ADDBUF 0x10 /* don't edit, just add to buffer list */
  356. /* flags for do_cmdline() */
  357. #define DOCMD_VERBOSE 0x01 /* included command in error message */
  358. #define DOCMD_NOWAIT 0x02 /* don't call wait_return() and friends */
  359. #define DOCMD_REPEAT 0x04 /* repeat exec. until getline() returns NULL */
  360. /* flags for beginline() */
  361. #define BL_WHITE 1 /* cursor on first non-white in the line */
  362. #define BL_SOL 2 /* use 'sol' option */
  363. #define BL_FIX 4 /* don't leave cursor on a NUL */
  364. /* flags for mf_sync() */
  365. #define MFS_ALL 1 /* also sync blocks with negative numbers */
  366. #define MFS_STOP 2 /* stop syncing when a character is available */
  367. #define MFS_FLUSH 4 /* flushed file to disk */
  368. #define MFS_ZERO 8 /* only write block 0 */
  369. /* flags for buf_copy_options() */
  370. #define BCO_ENTER 1 /* going to enter the buffer */
  371. #define BCO_ALWAYS 2 /* always copy the options */
  372. #define BCO_NOHELP 4 /* don't touch the help related options */
  373. /* flags for do_put() */
  374. #define PUT_FIXINDENT 1 /* make indent look nice */
  375. #define PUT_CURSEND 2 /* leave cursor after end of new text */
  376. /*
  377.  * There are three history tables:
  378.  */
  379. #define HIST_CMD    0     /* colon commands */
  380. #define HIST_SEARCH 1     /* search commands */
  381. #define HIST_EXPR   2     /* expressions (from entering | register) */
  382. #define HIST_INPUT  3     /* input() lines */
  383. #define HIST_COUNT  4     /* number of history tables */
  384. /*
  385.  * Flags for chartab[].
  386.  */
  387. #define CHAR_MASK 0x03 /* low two bits for size */
  388. #define CHAR_IP 0x04 /* third bit set for printable chars */
  389. #define CHAR_ID 0x08 /* fourth bit set for ID chars */
  390. #define CHAR_IF 0x10 /* fifth bit set for file name chars */
  391. /*
  392.  * Values for do_tag().
  393.  */
  394. #define DT_TAG 1 /* jump to newer position or same tag again */
  395. #define DT_POP 2 /* jump to older position */
  396. #define DT_NEXT 3 /* jump to next match of same tag */
  397. #define DT_PREV 4 /* jump to previous match of same tag */
  398. #define DT_FIRST 5 /* jump to first match of same tag */
  399. #define DT_LAST 6 /* jump to first match of same tag */
  400. #define DT_SELECT 7 /* jump to selection from list */
  401. #define DT_HELP 8 /* like DT_TAG, but no wildcards */
  402. #define DT_JUMP 9 /* jump to new tag or selection from list */
  403. #define DT_CSCOPE 10 /* cscope find command (like tjump) */
  404. /*
  405.  * flags for find_tags().
  406.  */
  407. #define TAG_HELP 1 /* only search for help tags */
  408. #define TAG_NAMES 2 /* only return name of tag */
  409. #define TAG_REGEXP 4 /* use tag pattern as regexp */
  410. #define TAG_NOIC 8 /* don't always ignore case */
  411. #ifdef USE_CSCOPE
  412. # define TAG_CSCOPE 16 /* cscope tag */
  413. #endif
  414. #define TAG_VERBOSE 32 /* message verbosity */
  415. /*
  416.  * Types of dialogs passed to do_vim_dialog().
  417.  */
  418. #define VIM_GENERIC 0
  419. #define VIM_ERROR 1
  420. #define VIM_WARNING 2
  421. #define VIM_INFO 3
  422. #define VIM_QUESTION 4
  423. #define VIM_LAST_TYPE 4 /* sentinel value */
  424. /*
  425.  * Return values for functions like gui_yesnocancel()
  426.  */
  427. #define VIM_OK 1
  428. #define VIM_YES 2
  429. #define VIM_NO 3
  430. #define VIM_CANCEL 4
  431. #define VIM_ALL 5
  432. #define VIM_DISCARDALL  6
  433. /* Magic chars used in confirm dialog strings */
  434. #define DLG_BUTTON_SEP 'n'
  435. #define DLG_HOTKEY_CHAR '&'
  436. /*
  437.  * Events for autocommands.
  438.  */
  439. enum auto_event
  440. {
  441.     EVENT_BUFDELETE = 0, /* just before deleting a buffer */
  442.     EVENT_BUFENTER, /* after entering a buffer */
  443.     EVENT_BUFFILEPOST, /* after renaming a buffer */
  444.     EVENT_BUFFILEPRE, /* before renaming a buffer */
  445.     EVENT_BUFLEAVE, /* before leaving a buffer */
  446.     EVENT_BUFNEWFILE, /* when creating a buffer for a new file */
  447.     EVENT_BUFREADPOST, /* after reading a buffer */
  448.     EVENT_BUFREADPRE, /* before reading a buffer */
  449.     EVENT_BUFUNLOAD, /* just before unloading a buffer */
  450.     EVENT_BUFWRITEPOST, /* after writing a buffer */
  451.     EVENT_BUFWRITEPRE, /* before writing a buffer */
  452.     EVENT_FILEAPPENDPOST, /* after appending to a file */
  453.     EVENT_FILEAPPENDPRE, /* before appending to a file */
  454.     EVENT_FILECHANGEDSHELL, /* after shell command that changed file */
  455.     EVENT_FILEREADPOST, /* after reading a file */
  456.     EVENT_FILEREADPRE, /* before reading a file */
  457.     EVENT_FILEWRITEPOST, /* after writing a file */
  458.     EVENT_FILEWRITEPRE, /* before writing a file */
  459.     EVENT_FILTERREADPOST, /* after reading from a filter */
  460.     EVENT_FILTERREADPRE, /* before reading from a filter */
  461.     EVENT_FILTERWRITEPOST, /* after writing to a filter */
  462.     EVENT_FILTERWRITEPRE, /* before writing to a filter */
  463.     EVENT_STDINREADPOST, /* after reading from stdin */
  464.     EVENT_STDINREADPRE, /* before reading from stdin */
  465.     EVENT_TERMCHANGED, /* after changing 'term' */
  466.     EVENT_USER, /* user defined autocommand */
  467.     EVENT_VIMENTER, /* after starting Vim */
  468.     EVENT_VIMLEAVE, /* before exiting Vim */
  469.     EVENT_VIMLEAVEPRE, /* before exiting Vim and writing .viminfo */
  470.     EVENT_WINENTER, /* after entering a window */
  471.     EVENT_WINLEAVE, /* before leaving a window */
  472.     EVENT_FILEENCODING, /* after changing the file-encoding (set fe=) */
  473.     NUM_EVENTS /* MUST be the last one */
  474. };
  475. typedef enum auto_event EVENT_T;
  476. /*
  477.  * Values for index in highlight_attr[].
  478.  * When making changes, also update the table in highlight_changed()!
  479.  */
  480. enum hlf_value
  481. {
  482.     HLF_8 = 0,     /* Meta & special keys listed with ":map" */
  483.     HLF_AT,     /* @ and ~ characters at end of screen */
  484.     HLF_D,     /* directories in CTRL-D listing */
  485.     HLF_E,     /* error messages */
  486.     HLF_H,     /* obsolete, ignored */
  487.     HLF_I,     /* incremental search */
  488.     HLF_L,     /* last search string */
  489.     HLF_M,     /* "--More--" message */
  490.     HLF_CM,     /* Mode (e.g., "-- INSERT --") */
  491.     HLF_N,     /* line number for ":number" and ":#" commands */
  492.     HLF_R,     /* return to continue message and yes/no questions */
  493.     HLF_S,     /* status lines */
  494.     HLF_SNC,     /* status lines of not-current windows */
  495.     HLF_T,     /* Titles for output from ":set all", ":autocmd" etc. */
  496.     HLF_V,     /* Visual mode */
  497.     HLF_W,     /* warning messages */
  498.     HLF_COUNT     /* MUST be the last one */
  499. };
  500. /*
  501.  * Boolean constants
  502.  */
  503. #ifndef TRUE
  504. # define FALSE 0     /* note: this is an int, not a long! */
  505. # define TRUE 1
  506. #endif
  507. #define MAYBE 2     /* sometimes used for a variant on TRUE */
  508. /* May be returned by add_new_completion(): */
  509. #define RET_ERROR (-1)
  510. /*
  511.  * Operator IDs; The order must correspond to op_chars[] in normal.c!
  512.  */
  513. #define OP_NOP     0 /* no pending operation */
  514. #define OP_DELETE   1 /* "d"  delete operator */
  515. #define OP_YANK     2 /* "y"  yank operator */
  516. #define OP_CHANGE   3 /* "c"  change operator */
  517. #define OP_LSHIFT   4 /* "<"  left shift operator */
  518. #define OP_RSHIFT   5 /* ">"  right shift operator */
  519. #define OP_FILTER   6 /* "!"  filter operator */
  520. #define OP_TILDE    7 /* "g~" switch case operator */
  521. #define OP_INDENT   8 /* "="  indent operator */
  522. #define OP_FORMAT   9 /* "gq" format operator */
  523. #define OP_COLON    10 /* ":"  colon operator */
  524. #define OP_UPPER    11 /* "gU" make upper case operator */
  525. #define OP_LOWER    12 /* "gu" make lower case operator */
  526. #define DO_JOIN     13 /* "J"  join operator, only for visual mode */
  527. /*
  528.  * Motion types, used for operators and for yank/delete registers.
  529.  */
  530. #define MCHAR 0 /* character-wise movement/register */
  531. #define MLINE 1 /* line-wise movement/register */
  532. #define MBLOCK 2 /* block-wise register */
  533. /*
  534.  * Minimum screen size
  535.  */
  536. #define MIN_COLUMNS 12 /* minimal columns for screen */
  537. #define MIN_LINES 2 /* minimal lines for screen */
  538. #define STATUS_HEIGHT 1 /* height of a status line under a window */
  539. /*
  540.  * Buffer sizes
  541.  */
  542. #ifndef CMDBUFFSIZE
  543. # define CMDBUFFSIZE 256 /* size of the command processing buffer */
  544. #endif
  545. #define LSIZE     512 /* max. size of a line in the tags file */
  546. #define IOSIZE    (1024+1) /* file i/o and sprintf buffer size */
  547. #define MSG_BUF_LEN 80 /* length of buffer for small messages */
  548. #if defined(AMIGA) || defined(__linux__) || defined(__QNX__) || defined(__CYGWIN32__) || defined(_AIX)
  549. # define TBUFSZ 2048 /* buffer size for termcap entry */
  550. #else
  551. # define TBUFSZ 1024 /* buffer size for termcap entry */
  552. #endif
  553. /*
  554.  * Maximum length of key sequence to be mapped.
  555.  * Must be able to hold an Amiga resize report.
  556.  */
  557. #define MAXMAPLEN   50
  558. #ifdef BINARY_FILE_IO
  559. # define WRITEBIN   "wb" /* no CR-LF translation */
  560. # define READBIN    "rb"
  561. # define APPENDBIN  "ab"
  562. #else
  563. # define WRITEBIN   "w"
  564. # define READBIN    "r"
  565. # define APPENDBIN  "a"
  566. #endif
  567. /*
  568.  * EMX doesn't have a global way of making open() use binary I/O.
  569.  * Use O_BINARY for all open() calls.
  570.  */
  571. #if defined(__EMX__) || defined(__CYGWIN32__)
  572. # define O_EXTRA    O_BINARY
  573. #else
  574. # define O_EXTRA    0
  575. #endif
  576. /*
  577.  * defines to avoid typecasts from (char_u *) to (char *) and back
  578.  * (vim_strchr() and vim_strrchr() are now in alloc.c)
  579.  */
  580. #define STRLEN(s)     strlen((char *)(s))
  581. #define STRCPY(d, s)     strcpy((char *)(d), (char *)(s))
  582. #define STRNCPY(d, s, n)    strncpy((char *)(d), (char *)(s), (size_t)(n))
  583. #define STRCMP(d, s)     strcmp((char *)(d), (char *)(s))
  584. #define STRNCMP(d, s, n)    strncmp((char *)(d), (char *)(s), (size_t)(n))
  585. #ifdef HAVE_STRCASECMP
  586. # define STRICMP(d, s)     strcasecmp((char *)(d), (char *)(s))
  587. #else
  588. # ifdef HAVE_STRICMP
  589. #  define STRICMP(d, s)     stricmp((char *)(d), (char *)(s))
  590. # else
  591. #  define STRICMP(d, s)     vim_stricmp((char *)(d), (char *)(s))
  592. # endif
  593. #endif
  594. #ifdef HAVE_STRNCASECMP
  595. # define STRNICMP(d, s, n)  strncasecmp((char *)(d), (char *)(s), (size_t)(n))
  596. #else
  597. # ifdef HAVE_STRNICMP
  598. #  define STRNICMP(d, s, n) strnicmp((char *)(d), (char *)(s), (size_t)(n))
  599. # else
  600. #  define STRNICMP(d, s, n) vim_strnicmp((char *)(d), (char *)(s), (size_t)(n))
  601. # endif
  602. #endif
  603. #define STRCAT(d, s)     strcat((char *)(d), (char *)(s))
  604. #define STRNCAT(d, s, n)    strncat((char *)(d), (char *)(s), (size_t)(n))
  605. #ifdef HAVE_STRPBRK
  606. # define vim_strpbrk(s, cs) (char_u *)strpbrk((char *)(s), (char *)(cs))
  607. #endif
  608. #define MSG(s)     msg((char_u *)(s))
  609. #define MSG_ATTR(s, attr)     msg_attr((char_u *)(s), (attr))
  610. #define EMSG(s)     emsg((char_u *)(s))
  611. #define EMSG2(s, p)     emsg2((char_u *)(s), (char_u *)(p))
  612. #define EMSGN(s, n)     emsgn((char_u *)(s), (long)(n))
  613. #define OUT_STR(s)     out_str((char_u *)(s))
  614. #define OUT_STR_NF(s)     out_str_nf((char_u *)(s))
  615. #define MSG_PUTS(s)     msg_puts((char_u *)(s))
  616. #define MSG_PUTS_ATTR(s, a)     msg_puts_attr((char_u *)(s), (a))
  617. #define MSG_PUTS_TITLE(s)     msg_puts_title((char_u *)(s))
  618. #define MSG_PUTS_LONG(s)     msg_puts_long((char_u *)(s))
  619. #define MSG_PUTS_LONG_ATTR(s, a)    msg_puts_long_attr((char_u *)(s), (a))
  620. typedef long     linenr_t;     /* line number type */
  621. typedef unsigned    colnr_t;     /* column number type */
  622. #define MAXLNUM (0x7fffffff)     /* maximum (invalid) line number */
  623. #if SIZEOF_INT >= 4
  624. # define MAXCOL (0x7fffffff)     /* maximum column number, 31 bits */
  625. #else
  626. # define MAXCOL (0x7fff)     /* maximum column number, 15 bits */
  627. #endif
  628. #define SHOWCMD_COLS 10     /* columns needed by shown command */
  629. /*
  630.  * Include a prototype for mch_memmove(), it may not be in alloc.pro.
  631.  */
  632. #ifdef VIM_MEMMOVE
  633. void mch_memmove __ARGS((void *, void *, size_t));
  634. #else
  635. # ifndef mch_memmove
  636. #  define mch_memmove(to, from, len) memmove(to, from, len)
  637. # endif
  638. #endif
  639. /*
  640.  * fnamecmp() is used to compare file names.
  641.  * On some systems case in a file name does not matter, on others it does.
  642.  * (this does not account for maximum name lengths and things like "../dir",
  643.  * thus it is not 100% accurate!)
  644.  */
  645. #ifdef CASE_INSENSITIVE_FILENAME
  646. # define fnamecmp(x, y) STRICMP((x), (y))
  647. # define fnamencmp(x, y, n) STRNICMP((x), (y), (n))
  648. #else
  649. # define fnamecmp(x, y) strcmp((char *)(x), (char *)(y))
  650. # define fnamencmp(x, y, n) strncmp((char *)(x), (char *)(y), (size_t)(n))
  651. #endif
  652. #ifdef HAVE_MEMSET
  653. # define vim_memset(ptr, c, size)   memset((ptr), (c), (size))
  654. #else
  655. void *vim_memset __ARGS((void *, int, size_t));
  656. #endif
  657. #ifdef HAVE_MEMCMP
  658. # define vim_memcmp(p1, p2, len)   memcmp((p1), (p2), (len))
  659. #else
  660. # ifdef HAVE_BCMP
  661. #  define vim_memcmp(p1, p2, len)   bcmp((p1), (p2), (len))
  662. # else
  663. int vim_memcmp __ARGS((void *, void *, size_t));
  664. #  define VIM_MEMCMP
  665. # endif
  666. #endif
  667. /*
  668.  * Enums need a typecast to be used as array index (for Ultrix).
  669.  */
  670. #define hl_attr(n) highlight_attr[(int)(n)]
  671. #define term_str(n) term_strings[(int)(n)]
  672. /*
  673.  * vim_iswhite() is used for "^" and the like. It differs from isspace()
  674.  * because it doesn't include <CR> and <LF> and the like.
  675.  */
  676. #define vim_iswhite(x) ((x) == ' ' || (x) == 't')
  677. /* GUI and MSDOS can change the shape of the cursor */
  678. #if defined(USE_GUI) || defined(MSDOS) || (defined(WIN32) && !defined(USE_GUI_WIN32))
  679. # define CURSOR_SHAPE
  680. #endif
  681. /* Note that gui.h is included by structs.h */
  682. #include "regexp.h"     /* for struct regexp */
  683. #include "structs.h"     /* file that defines many structures */
  684. #ifdef USE_MOUSE
  685. /* Codes for mouse event */
  686. # define MOUSE_LEFT 0x00
  687. # define MOUSE_MIDDLE 0x01
  688. # define MOUSE_RIGHT 0x02
  689. # define MOUSE_RELEASE 0x03
  690. # define MOUSE_SHIFT 0x04
  691. # define MOUSE_ALT 0x08
  692. # define MOUSE_CTRL 0x10
  693. /* 0x20 is reserved by xterm */
  694. # define MOUSE_DRAG (0x40 | MOUSE_RELEASE)
  695. # define MOUSE_CLICK_MASK    0x03
  696. # define NUM_MOUSE_CLICKS(code) 
  697.     (((unsigned)((code) & 0xC0) >> 6) + 1)
  698. # define SET_NUM_MOUSE_CLICKS(code, num) 
  699.     (code) = ((code) & 0x3f) | ((((num) - 1) & 3) << 6)
  700. /*
  701.  * jump_to_mouse() returns one of these values, possibly with
  702.  * CURSOR_MOVED added
  703.  */
  704. # define IN_UNKNOWN 1
  705. # define IN_BUFFER 2
  706. # define IN_STATUS_LINE 3     /* Or in command line */
  707. # define CURSOR_MOVED 0x100
  708. /* flags for jump_to_mouse() */
  709. # define MOUSE_FOCUS 0x01 /* need to stay in this window */
  710. # define MOUSE_MAY_VIS 0x02 /* may start Visual mode */
  711. # define MOUSE_DID_MOVE 0x04 /* only act when mouse has moved */
  712. # define MOUSE_SETPOS 0x08 /* only set current mouse position */
  713. # define MOUSE_MAY_STOP_VIS 0x10 /* may stop Visual mode */
  714. #endif /* USE_MOUSE */
  715. /* defines for eval_vars() */
  716. #define VALID_PATH 1
  717. #define VALID_HEAD 2
  718. #ifdef USE_CLIPBOARD
  719. /* Selection states for modeless selection */
  720. # define SELECT_CLEARED 0
  721. # define SELECT_IN_PROGRESS 1
  722. # define SELECT_DONE 2
  723. # define SELECT_MODE_CHAR 0
  724. # define SELECT_MODE_WORD 1
  725. # define SELECT_MODE_LINE 2
  726. # ifdef USE_GUI_WIN32
  727. #  ifdef HAVE_OLE
  728. #   define WM_OLE (WM_APP+0)
  729. #  endif
  730. # endif
  731. /* Info about selected text */
  732. typedef struct VimClipboard
  733. {
  734.     int available;     /* Is clipboard available? */
  735.     int owned;     /* Flag: do we own the selection? */
  736.     FPOS start;     /* Start of selected area */
  737.     FPOS end;     /* End of selected area */
  738.     int vmode;     /* Visual mode character */
  739.     /* Fields for selection that doesn't use Visual mode */
  740.     short_u origin_row;
  741.     short_u origin_start_col;
  742.     short_u origin_end_col;
  743.     short_u word_start_col;
  744.     short_u word_end_col;
  745.     FPOS prev;     /* Previous position */
  746.     short_u state;     /* Current selection state */
  747.     short_u mode;     /* Select by char, word, or line. */
  748. # ifdef USE_GUI_X11
  749.     Atom atom;     /* Vim's own special selection format */
  750. # endif
  751. # ifdef WIN32
  752.     int_u format;     /* Vim's own special clipboard format */
  753. # endif
  754. # ifdef USE_GUI_BEOS
  755.     /* no clipboard at the moment */
  756. # endif
  757. } VimClipboard;
  758. #endif /* USE_CLIPBOARD */
  759. #ifdef __BORLANDC__
  760. /* work around a bug in the Borland 'stat' function: */
  761. # include <io.h>     /* for access() */
  762. # define stat(a,b) (access(a,0) ? -1 : stat(a,b))
  763. #endif
  764. #include "globals.h"     /* global variables and messages */
  765. #include "option.h"     /* option variables and defines */
  766. #include "ex_cmds.h"     /* Ex command defines */
  767. #include "proto.h"     /* function prototypes */
  768. #ifdef USE_SNIFF
  769. # include "if_sniff.h"
  770. #endif
  771. /* This has to go after the include of proto.h, as proto/os_win32.pro declares
  772.  * functions of these names. The declarations would break if the defines had
  773.  * been seen at that stage.
  774.  */
  775. #if !defined(USE_GUI_WIN32) && !defined(macintosh)
  776. # define mch_errmsg(str) fprintf(stderr, (str))
  777. # define mch_display_error() fflush(stderr)
  778. # define mch_msg(str) printf((str))
  779. #else
  780. # define mch_msg(str) mch_errmsg((str))
  781. #endif
  782. /*
  783.  * If console dialog not supported, but GUI dialog is, use the GUI one.
  784.  */
  785. #if defined(GUI_DIALOG) && !defined(CON_DIALOG)
  786. # define do_dialog gui_mch_dialog
  787. #endif
  788. /*
  789.  * The filters used in file browsers are too machine specific to
  790.  * be defined usefully in a generic fashion.
  791.  * So instead the filter strings are defined here for each architecture
  792.  * that supports gui_mch_browse()
  793.  */
  794. #ifdef USE_BROWSE
  795. # ifdef USE_GUI_WIN32
  796. #  define BROWSE_FILTER_MACROS 
  797. (char_u *)"Vim macro files (*.vim)*.vimAll Files (*.*)*.*"
  798. #  define BROWSE_FILTER_ALL_FILES (char_u *)"All Files (*.*)*.*"
  799. # else
  800. #  define BROWSE_FILTER_MACROS 
  801. (char_u *)"Vim macro files (*.vim)*.vimAll Files (*)*"
  802. #  define BROWSE_FILTER_ALL_FILES (char_u *)"All Files (*)*"
  803. # endif
  804. #endif
  805. /* stop using fastcall for Borland */
  806. #if defined(__BORLANDC__) && defined(WIN32) && !defined(DEBUG)
  807. # pragma option -p.
  808. #endif
  809. #if !defined(MEM_PROFILE) && !defined(PROTO)
  810. # define vim_realloc(ptr, size)  realloc((ptr), (size))
  811. #endif
  812. #endif /* VIM__H */