Skip to content
This repository
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 210 lines (176 sloc) 5.705 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209
/* vi:set ts=8 sts=4 sw=4:
*
* VIM - Vi IMproved by Bram Moolenaar
*
* Do ":help uganda" in Vim to read copying and usage conditions.
* Do ":help credits" in Vim to see a list of people who contributed.
*/

/*
* Win32 (Windows NT and Windows 95) machine-dependent things.
*/

#include "os_dos.h" /* common MS-DOS and Win32 stuff */
#ifndef __CYGWIN__
#include <direct.h> /* for _mkdir() */
#endif

/* Stop the VC2005 compiler from nagging. */
#if _MSC_VER >= 1400
# define _CRT_SECURE_NO_DEPRECATE
# define _CRT_NONSTDC_NO_DEPRECATE
#endif

#define BINARY_FILE_IO
#define USE_EXE_NAME /* use argv[0] for $VIM */
#define SYNC_DUP_CLOSE /* sync() a file with dup() and close() */
#define USE_TERM_CONSOLE
#ifndef HAVE_STRING_H
# define HAVE_STRING_H
#endif
#ifndef HAVE_MATH_H
# define HAVE_MATH_H
#endif
#define HAVE_STRCSPN
#ifndef __GNUC__
#define HAVE_STRICMP
#define HAVE_STRNICMP
#endif
#ifndef HAVE_STRFTIME
# define HAVE_STRFTIME /* guessed */
#endif
#define HAVE_MEMSET
#ifndef HAVE_LOCALE_H
# define HAVE_LOCALE_H 1
#endif
#ifndef HAVE_FCNTL_H
# define HAVE_FCNTL_H
#endif
#ifndef HAVE_STDARG_H
# define HAVE_STDARG_H
#endif
#define HAVE_QSORT
#define HAVE_ST_MODE /* have stat.st_mode */

#define FEAT_SHORTCUT /* resolve shortcuts */

#if !defined(__MINGW32__) \
&& !defined(__CYGWIN__) \
&& (!defined(__BORLANDC__) || __BORLANDC__ >= 0x550) \
&& (!defined(_MSC_VER) || _MSC_VER > 1020)
/*
* Access Control List (actually security info).
* Mingw and Cygwin don't have the acl stuff.
* Borland only in version 5.5 and later.
* MSVC in 5.0, not in 4.2, don't know about 4.3.
*/
# define HAVE_ACL
#endif

#define USE_FNAME_CASE /* adjust case of file names */
#if !defined(FEAT_CLIPBOARD) && defined(FEAT_VISUAL) && defined(FEAT_MOUSE)
# define FEAT_CLIPBOARD /* include clipboard support */
#endif
#if defined(__DATE__) && defined(__TIME__)
# define HAVE_DATE_TIME
#endif
#ifndef FEAT_GUI_W32 /* GUI works different */
# define BREAKCHECK_SKIP 1 /* call mch_breakcheck() each time, it's fast */
#endif
#define HAVE_AVAIL_MEM

#define HAVE_PUTENV /* at least Bcc 5.2 and MSC have it */

#ifdef FEAT_GUI_W32
# define NO_CONSOLE /* don't included console-only code */
#endif

/* toupper() is not really broken, but it's very slow. Probably because of
* using Unicode characters on Windows NT */
#define BROKEN_TOUPPER

#define FNAME_ILLEGAL "\"*?><|" /* illegal characters in a file name */

#include <stdlib.h>
#include <time.h>
#include <sys/types.h>

#ifndef STRICT
# define STRICT
#endif
#ifndef COBJMACROS
# define COBJMACROS /* For OLE: Enable "friendlier" access to objects */
#endif
#include <windows.h>

/*
* Win32 has plenty of memory, use large buffers
*/
#define CMDBUFFSIZE 1024 /* size of the command processing buffer */

/* _MAX_PATH is only 256 (stdlib.h), but we want more for the 'path' option,
* thus use a larger number. */
#define MAXPATHL 1024

#ifndef BASENAMELEN
# define BASENAMELEN (_MAX_PATH - 5) /* length of base of file name */
#endif

#define TEMPNAMELEN _MAX_PATH /* length of temp file name path */

#ifndef DFLT_MAXMEM
# define DFLT_MAXMEM (2*1024) /* use up to 2 Mbyte for a buffer */
#endif

#ifndef DFLT_MAXMEMTOT
# define DFLT_MAXMEMTOT (5*1024) /* use up to 5 Mbyte for Vim */
#endif

#if defined(_MSC_VER) || defined(__BORLANDC__)
    /* Support for __try / __except. All versions of MSVC and Borland C are
* expected to have this. Any other compilers that support it? */
# define HAVE_TRY_EXCEPT 1
# include <malloc.h> /* for _resetstkoflw() */
# if defined(_MSC_VER) && (_MSC_VER >= 1300)
# define RESETSTKOFLW _resetstkoflw
# else
# define RESETSTKOFLW myresetstkoflw
# define MYRESETSTKOFLW
# endif
#endif

/*
* Some simple debugging macros that look and behave a lot like their
* namesakes in MFC.
*/

#ifdef _DEBUG

# if defined(_MSC_VER) && (_MSC_VER >= 1000)
   /* Use the new debugging tools in Visual C++ 4.x */
# include <crtdbg.h>
# define ASSERT(f) _ASSERT(f)
# else
# include <assert.h>
# define ASSERT(f) assert(f)
# endif

# define TRACE Trace
# define TRACE0(sz) Trace(_T("%s"), _T(sz))
# define TRACE1(sz, p1) Trace(_T(sz), p1)
# define TRACE2(sz, p1, p2) Trace(_T(sz), p1, p2)
# define TRACE3(sz, p1, p2, p3) Trace(_T(sz), p1, p2, p3)
# define TRACE4(sz, p1, p2, p3, p4) Trace(_T(sz), p1, p2, p3, p4)

/* In debug version, writes trace messages to debug stream */
void __cdecl
Trace(char *pszFormat, ...);

#else /* !_DEBUG */

  /* These macros should all compile away to nothing */
# define ASSERT(f) ((void)0)
# define TRACE 1 ? (void)0 : printf
# define TRACE0(sz)
# define TRACE1(sz, p1)
# define TRACE2(sz, p1, p2)
# define TRACE3(sz, p1, p2, p3)
# define TRACE4(sz, p1, p2, p3, p4)

#endif /* !_DEBUG */


#define ASSERT_POINTER(p, type) \
ASSERT(((p) != NULL) && IsValidAddress((p), sizeof(type), FALSE))

#define ASSERT_NULL_OR_POINTER(p, type) \
ASSERT(((p) == NULL) || IsValidAddress((p), sizeof(type), FALSE))

#define mch_setenv(name, val, x) setenv(name, val, x)
#define mch_getenv(x) (char_u *)getenv((char *)(x))
#ifdef __BORLANDC__
# define vim_mkdir(x, y) mkdir(x)
#else
# define vim_mkdir(x, y) mch_mkdir(x)
#endif

/* Enable common dialogs input unicode from IME if posible. */
#ifdef FEAT_MBYTE
    /* The variables are defined in os_win32.c. */
extern LRESULT (WINAPI *pDispatchMessage)(LPMSG);
extern BOOL (WINAPI *pGetMessage)(LPMSG, HWND, UINT, UINT);
extern BOOL (WINAPI *pIsDialogMessage)(HWND, LPMSG);
extern BOOL (WINAPI *pPeekMessage)(LPMSG, HWND, UINT, UINT, UINT);
#else
# define pDispatchMessage DispatchMessage
# define pGetMessage GetMessage
# define pIsDialogMessage IsDialogMessage
# define pPeekMessage PeekMessage
#endif
Something went wrong with that request. Please try again.