4 From: Bram Moolenaar <Bram@moolenaar.net>
6 Content-Type: text/plain; charset=ISO-8859-1
7 Content-Transfer-Encoding: 8bit
11 Problem: Win64: Warnings while compiling Python interface.
12 Solution: Use PyInt in more places. Also update version message for the
13 console. (George Reilly)
14 Files: src/if_python.c, src/version.c
17 *** ../vim-7.1.319/src/if_python.c Wed Jun 4 13:33:15 2008
18 --- src/if_python.c Fri Jun 20 14:45:59 2008
22 #if !defined(FEAT_PYTHON) && defined(PROTO)
23 /* Use this to be able to generate prototypes without python being used. */
24 ! # define PyObject int
25 ! # define PyThreadState int
26 ! # define PyTypeObject int
27 ! struct PyMethodDef { int a; };
28 ! # define PySequenceMethods int
31 #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000
34 #if !defined(FEAT_PYTHON) && defined(PROTO)
35 /* Use this to be able to generate prototypes without python being used. */
36 ! # define PyObject Py_ssize_t
37 ! # define PyThreadState Py_ssize_t
38 ! # define PyTypeObject Py_ssize_t
39 ! struct PyMethodDef { Py_ssize_t a; };
40 ! # define PySequenceMethods Py_ssize_t
43 #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000
47 # define PyIntIntArgFunc ssizessizeargfunc
48 # define PyIntObjArgProc ssizeobjargproc
49 # define PyIntIntObjArgProc ssizessizeobjargproc
50 + # define Py_ssize_t_fmt "n"
53 # define PyInquiry inquiry
57 # define PyIntIntArgFunc intintargfunc
58 # define PyIntObjArgProc intobjargproc
59 # define PyIntIntObjArgProc intintobjargproc
60 + # define Py_ssize_t_fmt "i"
67 #if defined(DYNAMIC_PYTHON) || defined(PROTO)
68 # ifndef DYNAMIC_PYTHON
69 ! # define HINSTANCE int /* for generating prototypes */
77 #if defined(DYNAMIC_PYTHON) || defined(PROTO)
78 # ifndef DYNAMIC_PYTHON
79 ! # define HINSTANCE long_u /* for generating prototypes */
82 + /* This makes if_python.c compile without warnings against Python 2.5
83 + * on Win32 and Win64. */
84 + #undef PyRun_SimpleString
86 + #undef PyArg_ParseTuple
87 + #undef Py_BuildValue
88 + #undef Py_InitModule4
89 + #undef Py_InitModule4_64
97 {"PyType_Type", (PYTHON_PROC*)&dll_PyType_Type},
98 {"Py_BuildValue", (PYTHON_PROC*)&dll_Py_BuildValue},
99 {"Py_FindMethod", (PYTHON_PROC*)&dll_Py_FindMethod},
100 + # if (PY_VERSION_HEX >= 0x02050000) && SIZEOF_SIZE_T != SIZEOF_INT
101 + {"Py_InitModule4_64", (PYTHON_PROC*)&dll_Py_InitModule4},
103 {"Py_InitModule4", (PYTHON_PROC*)&dll_Py_InitModule4},
105 {"Py_Initialize", (PYTHON_PROC*)&dll_Py_Initialize},
106 {"Py_Finalize", (PYTHON_PROC*)&dll_Py_Finalize},
107 {"Py_IsInitialized", (PYTHON_PROC*)&dll_Py_IsInitialized},
113 ! python_enabled(verbose)
116 return python_runtime_link_init(DYNAMIC_PYTHON_DLL, verbose) == OK;
122 ! python_enabled(int verbose)
124 return python_runtime_link_init(DYNAMIC_PYTHON_DLL, verbose) == OK;
130 static void DoPythonCommand(exarg_T *, const char *);
131 ! static int RangeStart;
132 ! static int RangeEnd;
134 static void PythonIO_Flush(void);
135 static int PythonIO_Init(void);
139 static void DoPythonCommand(exarg_T *, const char *);
140 ! static PyInt RangeStart;
141 ! static PyInt RangeEnd;
143 static void PythonIO_Flush(void);
144 static int PythonIO_Init(void);
147 /* Utility functions for the vim/python interface
148 * ----------------------------------------------
150 ! static PyObject *GetBufferLine(buf_T *, int);
151 static PyObject *GetBufferLineList(buf_T *, PyInt, PyInt);
153 ! static int SetBufferLine(buf_T *, int, PyObject *, int *);
154 ! static int SetBufferLineList(buf_T *, PyInt, PyInt, PyObject *, int *);
155 ! static int InsertBufferLines(buf_T *, int, PyObject *, int *);
157 static PyObject *LineToString(const char *);
158 static char *StringToLine(PyObject *);
160 /* Utility functions for the vim/python interface
161 * ----------------------------------------------
163 ! static PyObject *GetBufferLine(buf_T *, PyInt);
164 static PyObject *GetBufferLineList(buf_T *, PyInt, PyInt);
166 ! static int SetBufferLine(buf_T *, PyInt, PyObject *, PyInt *);
167 ! static int SetBufferLineList(buf_T *, PyInt, PyInt, PyObject *, PyInt *);
168 ! static int InsertBufferLines(buf_T *, PyInt, PyObject *, PyInt *);
170 static PyObject *LineToString(const char *);
171 static char *StringToLine(PyObject *);
174 static PyObject *OutputWritelines(PyObject *, PyObject *);
176 typedef void (*writefn)(char_u *);
177 ! static void writer(writefn fn, char_u *str, int n);
179 /* Output object definition
182 static PyObject *OutputWritelines(PyObject *, PyObject *);
184 typedef void (*writefn)(char_u *);
185 ! static void writer(writefn fn, char_u *str, PyInt n);
187 /* Output object definition
192 PyObject *line = PyList_GetItem(list, i);
196 if (!PyArg_Parse(line, "s#", &str, &len)) {
197 PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
200 PyObject *line = PyList_GetItem(list, i);
204 if (!PyArg_Parse(line, "s#", &str, &len)) {
205 PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
210 static char_u *buffer = NULL;
211 ! static int buffer_len = 0;
212 ! static int buffer_size = 0;
214 static writefn old_fn = NULL;
217 ! buffer_ensure(int n)
226 static char_u *buffer = NULL;
227 ! static PyInt buffer_len = 0;
228 ! static PyInt buffer_size = 0;
230 static writefn old_fn = NULL;
233 ! buffer_ensure(PyInt n)
244 ! writer(writefn fn, char_u *str, int n)
252 ! writer(writefn fn, char_u *str, PyInt n)
259 while (n > 0 && (ptr = memchr(str, '\n', n)) != NULL)
261 ! int len = ptr - str;
263 buffer_ensure(buffer_len + len + 1);
267 while (n > 0 && (ptr = memchr(str, '\n', n)) != NULL)
269 ! PyInt len = ptr - str;
271 buffer_ensure(buffer_len + len + 1);
283 #define RangeType_Check(obj) ((obj)->ob_type == &RangeType)
285 ! static PyObject *RangeNew(buf_T *, int, int);
287 static void RangeDestructor(PyObject *);
288 static PyObject *RangeGetattr(PyObject *, char *);
298 #define RangeType_Check(obj) ((obj)->ob_type == &RangeType)
300 ! static PyObject *RangeNew(buf_T *, PyInt, PyInt);
302 static void RangeDestructor(PyObject *);
303 static PyObject *RangeGetattr(PyObject *, char *);
307 static struct PyMethodDef VimMethods[] = {
308 /* name, function, calling, documentation */
309 ! {"command", VimCommand, 1, "" },
310 ! {"eval", VimEval, 1, "" },
311 { NULL, NULL, 0, NULL }
316 static struct PyMethodDef VimMethods[] = {
317 /* name, function, calling, documentation */
318 ! {"command", VimCommand, 1, "Execute a Vim ex-mode command" },
319 ! {"eval", VimEval, 1, "Evaluate an expression using Vim evaluator" },
320 { NULL, NULL, 0, NULL }
325 * Function to translate a typval_T into a PyObject; this will recursively
326 * translate lists/dictionaries into their Python equivalents.
328 ! * The depth parameter is too avoid infinite recursion, set it to 1 when
329 * you call VimToPython.
333 * Function to translate a typval_T into a PyObject; this will recursively
334 * translate lists/dictionaries into their Python equivalents.
336 ! * The depth parameter is to avoid infinite recursion, set it to 1 when
337 * you call VimToPython.
343 /* Check if we run into a recursive loop. The item must be in lookupDict
344 * then and we can use it again. */
345 ! sprintf(ptrBuf, "%ld", (long)our_tv);
346 result = PyDict_GetItemString(lookupDict, ptrBuf);
351 /* Check if we run into a recursive loop. The item must be in lookupDict
352 * then and we can use it again. */
353 ! sprintf(ptrBuf, PRINTF_DECIMAL_LONG_U, (long_u)our_tv);
354 result = PyDict_GetItemString(lookupDict, ptrBuf);
359 if (our_tv->vval.v_dict != NULL)
361 hashtab_T *ht = &our_tv->vval.v_dict->dv_hashtab;
362 ! int todo = ht->ht_used;
367 if (our_tv->vval.v_dict != NULL)
369 hashtab_T *ht = &our_tv->vval.v_dict->dv_hashtab;
370 ! long_u todo = ht->ht_used;
379 ! RBItem(BufferObject *self, PyInt n, int start, int end)
381 if (CheckBuffer(self))
387 ! RBItem(BufferObject *self, PyInt n, PyInt start, PyInt end)
389 if (CheckBuffer(self))
396 ! RBSlice(BufferObject *self, PyInt lo, PyInt hi, int start, int end)
404 ! RBSlice(BufferObject *self, PyInt lo, PyInt hi, PyInt start, PyInt end)
413 ! RBAssItem(BufferObject *self, PyInt n, PyObject *val, int start, int end, int *new_end)
417 if (CheckBuffer(self))
423 ! RBAssItem(BufferObject *self, PyInt n, PyObject *val, PyInt start, PyInt end, PyInt *new_end)
427 if (CheckBuffer(self))
434 ! RBAssSlice(BufferObject *self, PyInt lo, PyInt hi, PyObject *val, int start, int end, int *new_end)
439 /* Self must be a valid buffer */
440 if (CheckBuffer(self))
445 ! RBAssSlice(BufferObject *self, PyInt lo, PyInt hi, PyObject *val, PyInt start, PyInt end, PyInt *new_end)
450 /* Self must be a valid buffer */
451 if (CheckBuffer(self))
457 ! RBAppend(BufferObject *self, PyObject *args, int start, int end, int *new_end)
464 if (CheckBuffer(self))
467 max = n = end - start + 1;
469 ! if (!PyArg_ParseTuple(args, "O|i", &lines, &n))
472 if (n < 0 || n > max)
477 ! RBAppend(BufferObject *self, PyObject *args, PyInt start, PyInt end, PyInt *new_end)
484 if (CheckBuffer(self))
487 max = n = end - start + 1;
489 ! if (!PyArg_ParseTuple(args, "O|" Py_ssize_t_fmt, &lines, &n))
492 if (n < 0 || n > max)
496 static struct PyMethodDef BufferMethods[] = {
497 /* name, function, calling, documentation */
498 ! {"append", BufferAppend, 1, "" },
499 ! {"mark", BufferMark, 1, "" },
500 ! {"range", BufferRange, 1, "" },
501 { NULL, NULL, 0, NULL }
506 static struct PyMethodDef BufferMethods[] = {
507 /* name, function, calling, documentation */
508 ! {"append", BufferAppend, 1, "Append data to Vim buffer" },
509 ! {"mark", BufferMark, 1, "Return (row,col) representing position of named mark" },
510 ! {"range", BufferRange, 1, "Return a range object which represents the part of the given buffer between line numbers s and e" },
511 { NULL, NULL, 0, NULL }
518 if (strcmp(name, "name") == 0)
519 ! return Py_BuildValue("s",this->buf->b_ffname);
520 else if (strcmp(name, "number") == 0)
521 ! return Py_BuildValue("i",this->buf->b_fnum);
522 else if (strcmp(name,"__members__") == 0)
523 return Py_BuildValue("[ss]", "name", "number");
528 if (strcmp(name, "name") == 0)
529 ! return Py_BuildValue("s", this->buf->b_ffname);
530 else if (strcmp(name, "number") == 0)
531 ! return Py_BuildValue(Py_ssize_t_fmt, this->buf->b_fnum);
532 else if (strcmp(name,"__members__") == 0)
533 return Py_BuildValue("[ss]", "name", "number");
538 if (this->buf == INVALID_BUFFER_VALUE)
540 ! vim_snprintf(repr, 100, _("<buffer object (deleted) at %8lX>"),
542 return PyString_FromString(repr);
546 char *name = (char *)this->buf->b_fname;
553 if (this->buf == INVALID_BUFFER_VALUE)
555 ! vim_snprintf(repr, 100, _("<buffer object (deleted) at %p>"), (self));
556 return PyString_FromString(repr);
560 char *name = (char *)this->buf->b_fname;
567 BufferAssItem(PyObject *self, PyInt n, PyObject *val)
569 return RBAssItem((BufferObject *)(self), n, val, 1,
570 ! (int)((BufferObject *)(self))->buf->b_ml.ml_line_count,
575 BufferAssItem(PyObject *self, PyInt n, PyObject *val)
577 return RBAssItem((BufferObject *)(self), n, val, 1,
578 ! (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
584 BufferAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val)
586 return RBAssSlice((BufferObject *)(self), lo, hi, val, 1,
587 ! (int)((BufferObject *)(self))->buf->b_ml.ml_line_count,
592 BufferAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val)
594 return RBAssSlice((BufferObject *)(self), lo, hi, val, 1,
595 ! (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
601 BufferAppend(PyObject *self, PyObject *args)
603 return RBAppend((BufferObject *)(self), args, 1,
604 ! (int)((BufferObject *)(self))->buf->b_ml.ml_line_count,
609 BufferAppend(PyObject *self, PyObject *args)
611 return RBAppend((BufferObject *)(self), args, 1,
612 ! (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
619 BufferRange(PyObject *self, PyObject *args)
624 if (CheckBuffer((BufferObject *)(self)))
627 ! if (!PyArg_ParseTuple(args, "ii", &start, &end))
630 return RangeNew(((BufferObject *)(self))->buf, start, end);
633 BufferRange(PyObject *self, PyObject *args)
638 if (CheckBuffer((BufferObject *)(self)))
641 ! if (!PyArg_ParseTuple(args, Py_ssize_t_fmt Py_ssize_t_fmt, &start, &end))
644 return RangeNew(((BufferObject *)(self))->buf, start, end);
648 static struct PyMethodDef RangeMethods[] = {
649 /* name, function, calling, documentation */
650 ! {"append", RangeAppend, 1, "" },
651 { NULL, NULL, 0, NULL }
656 static struct PyMethodDef RangeMethods[] = {
657 /* name, function, calling, documentation */
658 ! {"append", RangeAppend, 1, "Append data to the Vim range" },
659 { NULL, NULL, 0, NULL }
667 ! RangeNew(buf_T *buf, int start, int end)
675 ! RangeNew(buf_T *buf, PyInt start, PyInt end)
681 RangeGetattr(PyObject *self, char *name)
683 if (strcmp(name, "start") == 0)
684 ! return Py_BuildValue("i",((RangeObject *)(self))->start - 1);
685 else if (strcmp(name, "end") == 0)
686 ! return Py_BuildValue("i",((RangeObject *)(self))->end - 1);
688 return Py_FindMethod(RangeMethods, self, name);
691 RangeGetattr(PyObject *self, char *name)
693 if (strcmp(name, "start") == 0)
694 ! return Py_BuildValue(Py_ssize_t_fmt, ((RangeObject *)(self))->start - 1);
695 else if (strcmp(name, "end") == 0)
696 ! return Py_BuildValue(Py_ssize_t_fmt, ((RangeObject *)(self))->end - 1);
698 return Py_FindMethod(RangeMethods, self, name);
703 if (this->buf->buf == INVALID_BUFFER_VALUE)
705 ! vim_snprintf(repr, 100, "<range object (for deleted buffer) at %8lX>",
707 return PyString_FromString(repr);
712 if (this->buf->buf == INVALID_BUFFER_VALUE)
714 ! vim_snprintf(repr, 100, "<range object (for deleted buffer) at %p>",
716 return PyString_FromString(repr);
721 BufListLength(PyObject *self)
729 BufListLength(PyObject *self)
739 if (this->win == INVALID_WINDOW_VALUE)
741 ! vim_snprintf(repr, 100, _("<window object (deleted) at %.8lX>"),
743 return PyString_FromString(repr);
748 if (this->win == INVALID_WINDOW_VALUE)
750 ! vim_snprintf(repr, 100, _("<window object (deleted) at %p>"), (self));
751 return PyString_FromString(repr);
759 ! vim_snprintf(repr, 100, _("<window object (unknown) at %.8lX>"),
762 vim_snprintf(repr, 100, _("<window %d>"), i);
768 ! vim_snprintf(repr, 100, _("<window object (unknown) at %p>"),
771 vim_snprintf(repr, 100, _("<window %d>"), i);
775 WinListLength(PyObject *self)
783 WinListLength(PyObject *self)
792 else if (strcmp(name, "window") == 0)
793 return (PyObject *)WindowNew(curwin);
794 else if (strcmp(name, "line") == 0)
795 ! return GetBufferLine(curbuf, (int)curwin->w_cursor.lnum);
796 else if (strcmp(name, "range") == 0)
797 return RangeNew(curbuf, RangeStart, RangeEnd);
798 else if (strcmp(name,"__members__") == 0)
800 else if (strcmp(name, "window") == 0)
801 return (PyObject *)WindowNew(curwin);
802 else if (strcmp(name, "line") == 0)
803 ! return GetBufferLine(curbuf, (PyInt)curwin->w_cursor.lnum);
804 else if (strcmp(name, "range") == 0)
805 return RangeNew(curbuf, RangeStart, RangeEnd);
806 else if (strcmp(name,"__members__") == 0)
810 if (strcmp(name, "line") == 0)
812 ! if (SetBufferLine(curbuf, (int)curwin->w_cursor.lnum, value, NULL) == FAIL)
818 if (strcmp(name, "line") == 0)
820 ! if (SetBufferLine(curbuf, (PyInt)curwin->w_cursor.lnum, value, NULL) == FAIL)
826 /* Set sys.argv[] to avoid a crash in warn(). */
827 PySys_SetArgv(1, argv);
829 ! mod = Py_InitModule("vim", VimMethods);
830 dict = PyModule_GetDict(mod);
832 VimError = Py_BuildValue("s", "vim.error");
834 /* Set sys.argv[] to avoid a crash in warn(). */
835 PySys_SetArgv(1, argv);
837 ! mod = Py_InitModule4("vim", VimMethods, (char *)NULL, (PyObject *)NULL, PYTHON_API_VERSION);
838 dict = PyModule_GetDict(mod);
840 VimError = Py_BuildValue("s", "vim.error");
846 ! GetBufferLine(buf_T *buf, int n)
848 return LineToString((char *)ml_get_buf(buf, (linenr_T)n, FALSE));
854 ! GetBufferLine(buf_T *buf, PyInt n)
856 return LineToString((char *)ml_get_buf(buf, (linenr_T)n, FALSE));
863 ! py_fix_cursor(int lo, int hi, int extra)
865 if (curwin->w_cursor.lnum >= lo)
871 ! py_fix_cursor(linenr_T lo, linenr_T hi, linenr_T extra)
873 if (curwin->w_cursor.lnum >= lo)
877 * is set to the change in the buffer length.
880 ! SetBufferLine(buf_T *buf, int n, PyObject *line, int *len_change)
882 /* First of all, we check the thpe of the supplied Python object.
883 * There are three cases:
885 * is set to the change in the buffer length.
888 ! SetBufferLine(buf_T *buf, PyInt n, PyObject *line, PyInt *len_change)
890 /* First of all, we check the thpe of the supplied Python object.
891 * There are three cases:
895 deleted_lines_mark((linenr_T)n, 1L);
896 if (buf == curwin->w_buffer)
897 ! py_fix_cursor(n, n + 1, -1);
903 deleted_lines_mark((linenr_T)n, 1L);
904 if (buf == curwin->w_buffer)
905 ! py_fix_cursor((linenr_T)n, (linenr_T)n + 1, (linenr_T)-1);
911 * is set to the change in the buffer length.
914 ! SetBufferLineList(buf_T *buf, PyInt lo, PyInt hi, PyObject *list, int *len_change)
916 /* First of all, we check the thpe of the supplied Python object.
917 * There are three cases:
919 * is set to the change in the buffer length.
922 ! SetBufferLineList(buf_T *buf, PyInt lo, PyInt hi, PyObject *list, PyInt *len_change)
924 /* First of all, we check the thpe of the supplied Python object.
925 * There are three cases:
928 if (list == Py_None || list == NULL)
932 buf_T *savebuf = curbuf;
936 if (list == Py_None || list == NULL)
939 ! PyInt n = (int)(hi - lo);
940 buf_T *savebuf = curbuf;
945 deleted_lines_mark((linenr_T)lo, (long)i);
947 if (buf == curwin->w_buffer)
948 ! py_fix_cursor(lo, hi, -n);
953 deleted_lines_mark((linenr_T)lo, (long)i);
955 if (buf == curwin->w_buffer)
956 ! py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)-n);
963 PyInt new_len = PyList_Size(list);
964 PyInt old_len = hi - lo;
965 ! int extra = 0; /* lines added to text, can be negative */
971 PyInt new_len = PyList_Size(list);
972 PyInt old_len = hi - lo;
973 ! PyInt extra = 0; /* lines added to text, can be negative */
979 changed_lines((linenr_T)lo, 0, (linenr_T)hi, (long)extra);
981 if (buf == curwin->w_buffer)
982 ! py_fix_cursor(lo, hi, extra);
987 changed_lines((linenr_T)lo, 0, (linenr_T)hi, (long)extra);
989 if (buf == curwin->w_buffer)
990 ! py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)extra);
996 * is set to the change in the buffer length.
999 ! InsertBufferLines(buf_T *buf, int n, PyObject *lines, int *len_change)
1001 /* First of all, we check the type of the supplied Python object.
1002 * It must be a string or a list, or the call is in error.
1004 * is set to the change in the buffer length.
1007 ! InsertBufferLines(buf_T *buf, PyInt n, PyObject *lines, PyInt *len_change)
1009 /* First of all, we check the type of the supplied Python object.
1010 * It must be a string or a list, or the call is in error.
1011 *** ../vim-7.1.319/src/version.c Fri Jun 20 12:55:28 2008
1012 --- src/version.c Fri Jun 20 16:25:28 2008
1015 # ifdef FEAT_GUI_W32
1016 # if defined(_MSC_VER) && (_MSC_VER <= 1010)
1017 /* Only MS VC 4.1 and earlier can do Win32s */
1018 ! MSG_PUTS(_("\nMS-Windows 16/32 bit GUI version"));
1021 ! MSG_PUTS(_("\nMS-Windows 64 bit GUI version"));
1023 ! MSG_PUTS(_("\nMS-Windows 32 bit GUI version"));
1026 if (gui_is_win32s())
1028 # ifdef FEAT_GUI_W32
1029 # if defined(_MSC_VER) && (_MSC_VER <= 1010)
1030 /* Only MS VC 4.1 and earlier can do Win32s */
1031 ! MSG_PUTS(_("\nMS-Windows 16/32-bit GUI version"));
1034 ! MSG_PUTS(_("\nMS-Windows 64-bit GUI version"));
1036 ! MSG_PUTS(_("\nMS-Windows 32-bit GUI version"));
1039 if (gui_is_win32s())
1042 MSG_PUTS(_(" with OLE support"));
1045 ! MSG_PUTS(_("\nMS-Windows 32 bit console version"));
1049 ! MSG_PUTS(_("\nMS-Windows 16 bit version"));
1053 ! MSG_PUTS(_("\n32 bit MS-DOS version"));
1055 ! MSG_PUTS(_("\n16 bit MS-DOS version"));
1060 MSG_PUTS(_(" with OLE support"));
1064 ! MSG_PUTS(_("\nMS-Windows 64-bit console version"));
1066 ! MSG_PUTS(_("\nMS-Windows 32-bit console version"));
1071 ! MSG_PUTS(_("\nMS-Windows 16-bit version"));
1075 ! MSG_PUTS(_("\n32-bit MS-DOS version"));
1077 ! MSG_PUTS(_("\n16-bit MS-DOS version"));
1081 *** ../vim-7.1.319/src/version.c Fri Jun 20 12:55:28 2008
1082 --- src/version.c Fri Jun 20 16:25:28 2008
1086 { /* Add new patch number below this line */
1106 Dammit!! (Matthew Winn)
1108 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
1109 /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
1110 \\\ download, build and distribute -- http://www.A-A-P.org ///
1111 \\\ help me help AIDS victims -- http://ICCF-Holland.org ///