# HG changeset patch # User Christian Brabandt # Date 1476275405 -7200 # Node ID c036c0f636d591daf9dce2dc0cbcbd3d1aff80a2 # Parent b758a787983adf72f63b6a53cfa5c530a9f63712 commit https://github.com/vim/vim/commit/cea912af725c54f4727a0565e31661f6b29c6bb1 Author: Bram Moolenaar Date: Wed Oct 12 14:20:24 2016 +0200 patch 8.0.0029 Problem: Code for MS-Windows is complicated because of the exceptions for old systems. Solution: Drop support for MS-Windows older than Windows XP. (Ken Takata) diff --git a/runtime/doc/gui_w32.txt b/runtime/doc/gui_w32.txt --- a/runtime/doc/gui_w32.txt +++ b/runtime/doc/gui_w32.txt @@ -49,10 +49,6 @@ If you want Vim to start with a maximize vimrc or gvimrc file: > au GUIEnter * simalt ~x < - *gui-w32s* -There is a specific version of gvim.exe that runs under the Win32s subsystem -of Windows 3.1 or 3.11. See |win32s|. - Using Vim as a plugin *gui-w32-windowid* @@ -100,9 +96,10 @@ 7. You can also install Vim in the "Send To" menu: 1. Start a Windows Explorer 2. Navigate to your sendto directory: - Windows 95: %windir%\sendto (e.g. "c:\windows\sendto") Windows NT: %windir%\profiles\%user%\sendto (e.g. - "c:\winnt\profiles\mattha\sendto"). + "c:\winnt\profiles\mattha\sendto") + Windows XP: C:\Documents and Settings\%user%\SendTo + Windows Vista: C:\Users\%user%\AppData\Roaming\Microsoft\Windows\SendTo . 3. Right-click in the file pane and select New->Shortcut 4. Follow the shortcut wizard, using the full path to VIM/GVIM. @@ -274,35 +271,17 @@ WARNING: If you close this window with t question if you really want to kill the application, Vim may be killed too! (This does not apply to commands run asynchronously with ":!start".) -In Windows 95, the window in which the commands are executed is always 25x80 -characters, to be as DOS compatible as possible (this matters!). The default -system font is used. On NT, the window will be the default you have set up for -"Console" in Control Panel. On Win32s, the properties of the DOS box are -determined by _default.pif in the windows directory. - - *msdos-mode* -If you get a dialog that says "This program is set to run in MS-DOS mode..." -when you run an external program, you can solve this by changing the -properties of the associated shortcut: -- Use a Windows Explorer to find the command.com that is used. It can be - c:\command.com, c:\dos\command.com, c:\windows\command.com, etc. -- With the right mouse button, select properties of this command.com. -- In the Program tab select "Advanced". -- Unselect "MS-DOS mode". -- Click "OK" twice. +The window in which the commands are executed will be the default you have set +up for "Console" in Control Panel. *win32-!start* Normally, Vim waits for a command to complete before continuing (this makes sense for most shell commands which produce output for Vim to use). If you want Vim to start a program and return immediately, you can use the following -syntax on W95 & NT: > +syntax: > :!start [/min] {command} The optional "/min" causes the window to be minimized. -On Win32s, you will have to go to another window instead. Don't forget that -you must tell Windows 3.1x to keep executing a DOS command in the background -while you switch back to Vim. - ============================================================================== 5. Special colors *win32-colors* @@ -311,7 +290,7 @@ On Win32, the normal DOS colors can be u Additionally the system configured colors can also be used. These are known by the names Sys_XXX, where XXX is the appropriate system color name, from the following list (see the Win32 documentation for full descriptions). Case is -ignored. Note: On Win32s not all of these colors are supported. +ignored. Sys_3DDKShadow Sys_3DFace Sys_BTNFace Sys_3DHilight Sys_3DHighlight Sys_BTNHilight diff --git a/runtime/doc/os_win32.txt b/runtime/doc/os_win32.txt --- a/runtime/doc/os_win32.txt +++ b/runtime/doc/os_win32.txt @@ -1,4 +1,4 @@ -*os_win32.txt* For Vim version 8.0. Last change: 2016 Aug 28 +*os_win32.txt* For Vim version 8.0. Last change: 2016 Oct 12 VIM REFERENCE MANUAL by George Reilly @@ -7,20 +7,18 @@ *win32* *Win32* *MS-Windows* This file documents the idiosyncrasies of the Win32 version of Vim. -The Win32 version of Vim works on Windows NT, 95, 98, ME, XP, Vista and -Windows 7. There are both console and GUI versions. +The Win32 version of Vim works on Windows XP, Vista, 7, 8 and 10. There are +both console and GUI versions. The 32 bit version also runs on 64 bit MS-Windows systems. -There is GUI version for use in the Win32s subsystem in Windows 3.1[1]. You -can also use the 32-bit DOS version of Vim instead. See |os_msdos.txt|. - 1. Known problems |win32-problems| 2. Startup |win32-startup| 3. Restore screen contents |win32-restore| 4. Using the mouse |win32-mouse| -5. Running under Windows 3.1 |win32-win3.1| -6. Win32 mini FAQ |win32-faq| +5. Running under Windows 95 |win32-win95| +6. Running under Windows 3.1 |win32-win3.1| +7. Win32 mini FAQ |win32-faq| Additionally, there are a number of common Win32 and DOS items: File locations |dos-locations| @@ -43,20 +41,7 @@ The GUI version was made by George V. Re For compiling see "src/INSTALLpc.txt". *win32-compiling* ============================================================================== -1. Known problems *windows95* *win32-problems* - -There are a few known problems with running in a console on Windows 95. As -far as we know, this is the same in Windows 98 and Windows ME. - -Comments from somebody working at Microsoft: "Win95 console support has always -been and will always be flaky". -1. Dead key support doesn't work. -2. Resizing the window with ":set columns=nn lines=nn" works, but executing - external commands MAY CAUSE THE SYSTEM TO HANG OR CRASH. -3. Screen updating is slow, unless you change 'columns' or 'lines' to a - non-DOS value. But then the second problem applies! - -If this bothers you, use the 32 bit MS-DOS version or the Win32 GUI version. +1. Known problems *win32-problems* When doing file name completion, Vim also finds matches for the short file name. But Vim will still find and use the corresponding long file name. For @@ -141,60 +126,20 @@ When the mouse doesn't work, try disabli the console. ============================================================================== -5. Running under Windows 3.1 *win32-win3.1* +5. Running under Windows 95 *win32-win95* + *windows95* *windows98* *windowsme* +Windows 95/98/ME support was removed in patch 8.0.0029 If you want to use it +you will need to get a version older than that. - *win32s* *windows-3.1* +============================================================================== +6. Running under Windows 3.1 *win32-win3.1* + + *win32s* *windows-3.1* *gui-w32s* There was a special version of Gvim that runs under Windows 3.1 and 3.11. Support was removed in patch 7.4.1363. ============================================================================== -6. Win32 mini FAQ *win32-faq* - -Q. Why does the Win32 version of Vim update the screen so slowly on Windows 95? -A. The support for Win32 console mode applications is very buggy in Win95. - For some unknown reason, the screen updates very slowly when Vim is run at - one of the standard resolutions (80x25, 80x43, or 80x50) and the 16-bit DOS - version updates the screen much more quickly than the Win32 version. - However, if the screen is set to some other resolution, such as by ":set - columns=100" or ":set lines=40", screen updating becomes about as fast as - it is with the 16-bit version. - - WARNING: Changing 'columns' may make Windows 95 crash while updating the - window (complaints --> Microsoft). Since this mostly works, this has not - been disabled, but be careful with changing 'columns'. - - Changing the screen resolution makes updates faster, but it brings - additional problems. External commands (e.g., ":!dir") can cause Vim to - freeze when the screen is set to a non-standard resolution, particularly - when 'columns' is not equal to 80. It is not possible for Vim to reliably - set the screen resolution back to the value it had upon startup before - running external commands, so if you change the number of 'lines' or - 'columns', be very, very careful. In fact, Vim will not allow you to - execute external commands when 'columns' is not equal to 80, because it is - so likely to freeze up afterwards. - - None of the above applies on Windows NT. Screen updates are fast, no - matter how many 'lines' or 'columns' the window has, and external commands - do not cause Vim to freeze. - -Q. So if the Win32 version updates the screen so slowly on Windows 95 and the - 16-bit DOS version updates the screen quickly, why would I want to run the - Win32 version? -A. Firstly, the Win32 version isn't that slow, especially when the screen is - set to some non-standard number of 'lines' or 'columns'. Secondly, the - 16-bit DOS version has some severe limitations: It can't do big changes and - it doesn't know about long file names. The Win32 version doesn't have these - limitations and it's faster overall (the same is true for the 32-bit DJGPP - DOS version of Vim). The Win32 version is smarter about handling the - screen, the mouse, and the keyboard than the DJGPP version is. - -Q. And what about the 16-bit DOS version versus the Win32 version on NT? -A. There are no good reasons to run the 16-bit DOS version on NT. The Win32 - version updates the screen just as fast as the 16-bit version does when - running on NT. All of the above disadvantages apply. Finally, DOS - applications can take a long time to start up and will run more slowly. On - non-Intel NT platforms, the DOS version is almost unusably slow, because it - runs on top of an 80x86 emulator. +7. Win32 mini FAQ *win32-faq* Q. How do I change the font? A. In the GUI version, you can use the 'guifont' option. Example: > @@ -202,47 +147,6 @@ A. In the GUI version, you can use the ' < In the console version, you need to set the font of the console itself. You cannot do this from within Vim. -Q. When I change the size of the console window with ':set lines=xx' or - similar, the font changes! (Win95) -A. You have the console font set to 'Auto' in Vim's (or your MS-DOS prompt's) - properties. This makes W95 guess (badly!) what font is best. Set an explicit - font instead. - -Q. Why can't I paste into Vim when running Windows 95? -A. In the properties dialog box for the MS-DOS window, go to "MS-DOS - Prompt/Misc/Fast pasting" and make sure that it is NOT checked. You should - also do ":set paste" in Vim to avoid unexpected effects. |'paste'| - -Q. How do I type dead keys on Windows 95, in the console version? - (A dead key is an accent key, such as acute, grave, or umlaut, that doesn't - produce a character by itself, but when followed by another key, produces - an accented character, such as a-acute, e-grave, u-umlaut, n-tilde, and so - on. Very useful for most European languages. English-language keyboard - layouts don't use dead keys, as far as we know.) -A. You don't. The console mode input routines simply do not work correctly in - Windows 95, and I have not been able to work around them. In the words - of a senior developer at Microsoft: - Win95 console support has always been and will always be flaky. - - The flakiness is unavoidable because we are stuck between the world of - MS-DOS keyboard TSRs like KEYB (which wants to cook the data; - important for international) and the world of Win32. - - So keys that don't "exist" in MS-DOS land (like dead keys) have a - very tenuous existence in Win32 console land. Keys that act - differently between MS-DOS land and Win32 console land (like - capslock) will act flaky. - - Don't even _mention_ the problems with multiple language keyboard - layouts... - - You may be able to fashion some sort of workaround with the digraphs - mechanism. |digraphs| - - The best solution is to use the Win32 GUI version gvim.exe. Alternatively, - you can try one of the DOS versions of Vim where dead keys reportedly do - work. - Q. How do I type dead keys on Windows NT? A. Dead keys work on NT 3.51. Just type them as you would in any other application. @@ -349,28 +253,6 @@ A. You have two possible solutions depen < The first command runs notepad minimized and the second one runs it normally. -Q. I'm using Win32s, and when I try to run an external command like "make", - Vim doesn't wait for it to finish! Help! -A. The problem is that a 32-bit application (Vim) can't get notification from - Windows that a 16-bit application (your DOS session) has finished. Vim - includes a work-around for this, but you must set up your DOS commands to - run in a window, not full-screen. Unfortunately the default when you - install Windows is full-screen. To change this: - 1) Start PIF editor (in the Main program group). - 2) Open the file "_DEFAULT.PIF" in your Windows directory. - 3) Changes the display option from "Full Screen" to "Windowed". - 4) Save and exit. - - To test, start Vim and type > - :!dir C:\". -< You should see a DOS box window appear briefly with the directory listing. - -Q. I use Vim under Win32s and NT. In NT, I can define the console to default to - 50 lines, so that I get a 80x50 shell when I ':sh'. Can I do the same in - W3.1x, or am I stuck with 80x25? -A. Edit SYSTEM.INI and add 'ScreenLines=50' to the [NonWindowsApp] section. DOS - prompts and external DOS commands will now run in a 50-line window. - *windows-icon* Q. I don't like the Vim icon, can I change it? A. Yes, place your favorite icon in bitmaps/vim.ico in a directory of diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt --- a/runtime/doc/todo.txt +++ b/runtime/doc/todo.txt @@ -1,4 +1,4 @@ -*todo.txt* For Vim version 8.0. Last change: 2016 Oct 09 +*todo.txt* For Vim version 8.0. Last change: 2016 Oct 12 VIM REFERENCE MANUAL by Bram Moolenaar @@ -34,10 +34,6 @@ not be repeated below, unless there is e *known-bugs* -------------------- Known bugs and current work ----------------------- -After 8.0 is released: -- Drop support for older MS-Windows systems, before XP. - Patch from Ken Takata, updated 2016 Sep 12. - +channel: - Problem with stderr on Windows? (Vincent Rischmann, 2016 Aug 31, #1026) - Add 'cwd' argument to start_job(): directory to change to in the child. @@ -1809,10 +1805,6 @@ popup menu over it, first draw the new p size and then redraw the text, skipping the characters under the popup menu. This should avoid flicker. Other solution by A.Politz, 2007 Aug 22. -Windows 98: pasting from the clipboard with text from another application has -a trailing NUL. (Joachim Hofmann) Perhaps the length specified for CF_TEXT -isn't right? - When a register contains illegal bytes, writing viminfo in utf-8 and reading it back doesn't result in utf-8. (Devin Bayer) @@ -2418,8 +2410,6 @@ 9 Can't paste a Visual selection from Win32 GUI known bugs: - Win32: tearoff menu window should have a scrollbar when it's taller than the screen. -8 On Windows 98 the unicows library is needed to support functions with UCS2 - file names. Can we load unicows.dll dynamically? 8 The -P argument doesn't work very well with many MDI applications. The last argument of CreateWindowEx() should be used, see MSDN docs. Tutorial: http://win32assembly.online.fr/tut32.html diff --git a/src/GvimExt/Makefile b/src/GvimExt/Makefile --- a/src/GvimExt/Makefile +++ b/src/GvimExt/Makefile @@ -3,7 +3,7 @@ # DEBUG=yes Build debug version (for VC7 and maybe later) # -TARGETOS=BOTH +TARGETOS=WINNT !ifndef APPVER APPVER=5.0 !endif diff --git a/src/Make_mvc.mak b/src/Make_mvc.mak --- a/src/Make_mvc.mak +++ b/src/Make_mvc.mak @@ -1,7 +1,7 @@ -# Makefile for Vim on Win32 (Windows NT/2000/XP/2003 and Windows 95/98/Me) -# and Win64, using the Microsoft Visual C++ compilers. Known to work with -# VC5, VC6 (VS98), VC7.0 (VS2002), VC7.1 (VS2003), VC8 (VS2005), -# VC9 (VS2008), VC10 (VS2010) and VC11 (VS2012) +# Makefile for Vim on Win32 (Windows XP/2003/Vista/7/8/10) and Win64, +# using the Microsoft Visual C++ compilers. Known to work with VC5, VC6 (VS98), +# VC7.0 (VS2002), VC7.1 (VS2003), VC8 (VS2005), VC9 (VS2008), VC10 (VS2010), +# VC11 (VS2012), VC12 (VS2013) and VC14 (VS2015) # # To build using other Windows compilers, see INSTALLpc.txt # @@ -119,7 +119,7 @@ # yes: Write a normal mapfile. # lines: Write a mapfile with line numbers (only for VC6 and later) # -# Static Code Analysis: ANALYZE=yes (works with VS2012 only) +# Static Code Analysis: ANALYZE=yes (works with VS2012 or later) # # You can combine any of these interfaces # @@ -162,9 +162,9 @@ # you can set DEFINES on the command line, e.g., # nmake -f Make_mvc.mvc "DEFINES=-DEMACS_TAGS" -# Build on both Windows NT/XP and Windows 9x +# Build on Windows NT/XP -TARGETOS = BOTH +TARGETOS = WINNT # Select one of eight object code directories, depends on GUI, OLE, DEBUG and # interfaces. @@ -436,13 +436,7 @@ CFLAGS = -c /W3 /nologo $(CVARS) -I. -Ip #>>>>> end of choices ########################################################################### -!ifdef OS -OS_TYPE = winnt DEL_TREE = rmdir /s /q -!else -OS_TYPE = win95 -DEL_TREE = deltree /y -!endif INTDIR=$(OBJDIR) OUTDIR=$(OBJDIR) diff --git a/src/evalfunc.c b/src/evalfunc.c --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -6017,7 +6017,7 @@ f_has(typval_T *argvars, typval_T *rettv #endif #if defined(WIN3264) else if (STRICMP(name, "win95") == 0) - n = mch_windows95(); + n = FALSE; /* Win9x is no more supported. */ #endif #ifdef FEAT_NETBEANS_INTG else if (STRICMP(name, "netbeans_enabled") == 0) diff --git a/src/ex_cmds.c b/src/ex_cmds.c --- a/src/ex_cmds.c +++ b/src/ex_cmds.c @@ -1175,14 +1175,6 @@ do_filter( if (*cmd == NUL) /* no filter command */ return; -#ifdef WIN3264 - /* - * Check if external commands are allowed now. - */ - if (can_end_termcap_mode(TRUE) == FALSE) - return; -#endif - cursor_save = curwin->w_cursor; linecount = line2 - line1 + 1; curwin->w_cursor.lnum = line1; @@ -1460,12 +1452,6 @@ do_shell( #ifdef MSWIN /* - * Check if external commands are allowed now. - */ - if (can_end_termcap_mode(TRUE) == FALSE) - return; - - /* * Check if ":!start" is used. */ if (cmd != NULL) diff --git a/src/ex_docmd.c b/src/ex_docmd.c --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -7611,14 +7611,7 @@ ex_stop(exarg_T *eap) /* * Disallow suspending for "rvim". */ - if (!check_restricted() -#ifdef WIN3264 - /* - * Check if external commands are allowed now. - */ - && can_end_termcap_mode(TRUE) -#endif - ) + if (!check_restricted()) { if (!eap->forceit) autowrite_all(); diff --git a/src/gui_w32.c b/src/gui_w32.c --- a/src/gui_w32.c +++ b/src/gui_w32.c @@ -319,7 +319,7 @@ static int destroying = FALSE; /* call #ifdef MSWIN_FIND_REPLACE static UINT s_findrep_msg = 0; /* set in gui_w[16/32].c */ static FINDREPLACE s_findrep_struct; -# if defined(FEAT_MBYTE) && defined(WIN3264) +# ifdef FEAT_MBYTE static FINDREPLACEW s_findrep_struct_w; # endif static HWND s_findrep_hwnd = NULL; @@ -369,7 +369,7 @@ static int allow_scrollbar = FALSE; # define MyTranslateMessage(x) TranslateMessage(x) #endif -#if (defined(WIN3264) && defined(FEAT_MBYTE)) || defined(GLOBAL_IME) +#if defined(FEAT_MBYTE) || defined(GLOBAL_IME) /* use of WindowProc depends on wide_WindowProc */ # define MyWindowProc vim_WindowProc #else @@ -473,10 +473,6 @@ static UINT s_wait_timer = 0; /* Timer static int s_timed_out = FALSE; static int dead_key = 0; /* 0: no dead key, 1: dead key pressed */ -#ifdef WIN3264 -static OSVERSIONINFO os_version; /* like it says. Init in gui_mch_init() */ -#endif - #ifdef FEAT_BEVAL /* balloon-eval WM_NOTIFY_HANDLER */ static void Handle_WM_Notify(HWND hwnd, LPNMHDR pnmh); @@ -695,61 +691,41 @@ char_to_string(int ch, char_u *string, i WCHAR wstring[2]; char_u *ws = NULL; - if (os_version.dwPlatformId != VER_PLATFORM_WIN32_NT) - { - /* On Windows 95/98 we apparently get the character in the active - * codepage, not in UCS-2. If conversion is needed convert it to - * UCS-2 first. */ - if ((int)GetACP() == enc_codepage) - len = 0; /* no conversion required */ - else - { - string[0] = ch; - len = MultiByteToWideChar(GetACP(), 0, (LPCSTR)string, - 1, wstring, 2); + wstring[0] = ch; + len = 1; + + /* "ch" is a UTF-16 character. Convert it to a string of bytes. When + * "enc_codepage" is non-zero use the standard Win32 function, + * otherwise use our own conversion function (e.g., for UTF-8). */ + if (enc_codepage > 0) + { + len = WideCharToMultiByte(enc_codepage, 0, wstring, len, + (LPSTR)string, slen, 0, NULL); + /* If we had included the ALT key into the character but now the + * upper bit is no longer set, that probably means the conversion + * failed. Convert the original character and set the upper bit + * afterwards. */ + if (had_alt && len == 1 && ch >= 0x80 && string[0] < 0x80) + { + wstring[0] = ch & 0x7f; + len = WideCharToMultiByte(enc_codepage, 0, wstring, len, + (LPSTR)string, slen, 0, NULL); + if (len == 1) /* safety check */ + string[0] |= 0x80; } } else { - wstring[0] = ch; len = 1; - } - - if (len > 0) - { - /* "ch" is a UTF-16 character. Convert it to a string of bytes. When - * "enc_codepage" is non-zero use the standard Win32 function, - * otherwise use our own conversion function (e.g., for UTF-8). */ - if (enc_codepage > 0) - { - len = WideCharToMultiByte(enc_codepage, 0, wstring, len, - (LPSTR)string, slen, 0, NULL); - /* If we had included the ALT key into the character but now the - * upper bit is no longer set, that probably means the conversion - * failed. Convert the original character and set the upper bit - * afterwards. */ - if (had_alt && len == 1 && ch >= 0x80 && string[0] < 0x80) - { - wstring[0] = ch & 0x7f; - len = WideCharToMultiByte(enc_codepage, 0, wstring, len, - (LPSTR)string, slen, 0, NULL); - if (len == 1) /* safety check */ - string[0] |= 0x80; - } - } + ws = utf16_to_enc(wstring, &len); + if (ws == NULL) + len = 0; else { - len = 1; - ws = utf16_to_enc(wstring, &len); - if (ws == NULL) - len = 0; - else - { - if (len > slen) /* just in case */ - len = slen; - mch_memmove(string, ws, len); - vim_free(ws); - } + if (len > slen) /* just in case */ + len = slen; + mch_memmove(string, ws, len); + vim_free(ws); } } @@ -1079,7 +1055,7 @@ gui_mswin_find_menu( #endif #ifdef MSWIN_FIND_REPLACE -# if defined(FEAT_MBYTE) && defined(WIN3264) +# ifdef FEAT_MBYTE /* * copy useful data from structure LPFINDREPLACE to structure LPFINDREPLACEW */ @@ -1127,11 +1103,10 @@ findrep_wtoa(LPFINDREPLACE lpfr, LPFINDR int flags = 0; int down; -# if defined(FEAT_MBYTE) && defined(WIN3264) +# ifdef FEAT_MBYTE /* If the OS is Windows NT, and 'encoding' differs from active codepage: * convert text from wide string. */ - if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT - && enc_codepage >= 0 && (int)GetACP() != enc_codepage) + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) { findrep_wtoa(&s_findrep_struct, &s_findrep_struct_w); } @@ -1279,7 +1254,7 @@ HandleMouseHide(UINT uMsg, LPARAM lParam } } -#if (defined(WIN3264) && defined(FEAT_MBYTE)) \ +#if defined(FEAT_MBYTE) \ || defined(GLOBAL_IME) \ || defined(PROTO) # ifdef PROTO @@ -1586,10 +1561,9 @@ gui_mch_get_color(char_u *name) static SysColorTable sys_table[] = { -#ifdef WIN3264 {"SYS_3DDKSHADOW", COLOR_3DDKSHADOW}, {"SYS_3DHILIGHT", COLOR_3DHILIGHT}, -#ifndef __MINGW32__ +#ifdef COLOR_3DHIGHLIGHT {"SYS_3DHIGHLIGHT", COLOR_3DHIGHLIGHT}, #endif {"SYS_BTNHILIGHT", COLOR_BTNHILIGHT}, @@ -1600,7 +1574,6 @@ gui_mch_get_color(char_u *name) {"SYS_INFOBK", COLOR_INFOBK}, {"SYS_INFOTEXT", COLOR_INFOTEXT}, {"SYS_3DFACE", COLOR_3DFACE}, -#endif {"SYS_BTNFACE", COLOR_BTNFACE}, {"SYS_BTNSHADOW", COLOR_BTNSHADOW}, {"SYS_ACTIVEBORDER", COLOR_ACTIVEBORDER}, @@ -2094,11 +2067,7 @@ gui_mch_wait_for_chars(int wtime) if (s_need_activate) { -#ifdef WIN32 (void)SetForegroundWindow(s_hwnd); -#else - (void)SetActiveWindow(s_hwnd); -#endif s_need_activate = FALSE; } @@ -2421,7 +2390,6 @@ add_tabline_popup_menu_entry(HMENU pmenu { #ifdef FEAT_MBYTE WCHAR *wn = NULL; - int n; if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) { @@ -2438,11 +2406,8 @@ add_tabline_popup_menu_entry(HMENU pmenu infow.fType = MFT_STRING; infow.dwTypeData = wn; infow.cch = (UINT)wcslen(wn); - n = InsertMenuItemW(pmenu, item_id, FALSE, &infow); + InsertMenuItemW(pmenu, item_id, FALSE, &infow); vim_free(wn); - if (n == 0 && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - /* Failed, try using non-wide function. */ - wn = NULL; } } @@ -2563,7 +2528,7 @@ gui_mch_update_tabline(void) if (s_tabhwnd == NULL) return; -#if defined(FEAT_MBYTE) +#ifdef FEAT_MBYTE # ifndef CCM_SETUNICODEFORMAT /* For older compilers. We assume this never changes. */ # define CCM_SETUNICODEFORMAT 0x2005 @@ -2708,18 +2673,15 @@ set_window_title(HWND hwnd, char *title) if (title != NULL && enc_codepage >= 0 && enc_codepage != (int)GetACP()) { WCHAR *wbuf; - int n; /* Convert the title from 'encoding' to UTF-16. */ wbuf = (WCHAR *)enc_to_utf16((char_u *)title, NULL); if (wbuf != NULL) { - n = SetWindowTextW(hwnd, wbuf); + SetWindowTextW(hwnd, wbuf); vim_free(wbuf); - if (n != 0 || GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) - return; - /* Retry with non-wide function (for Windows 98). */ - } + } + return; } #endif (void)SetWindowText(hwnd, (LPCSTR)title); @@ -2737,11 +2699,10 @@ gui_mch_find_dialog(exarg_T *eap) if (!IsWindow(s_findrep_hwnd)) { initialise_findrep(eap->arg); -# if defined(FEAT_MBYTE) && defined(WIN3264) +# ifdef FEAT_MBYTE /* If the OS is Windows NT, and 'encoding' differs from active * codepage: convert text and use wide function. */ - if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT - && enc_codepage >= 0 && (int)GetACP() != enc_codepage) + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) { findrep_atow(&s_findrep_struct_w, &s_findrep_struct); s_findrep_hwnd = FindTextW( @@ -2774,9 +2735,8 @@ gui_mch_replace_dialog(exarg_T *eap) if (!IsWindow(s_findrep_hwnd)) { initialise_findrep(eap->arg); -# if defined(FEAT_MBYTE) && defined(WIN3264) - if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT - && enc_codepage >= 0 && (int)GetACP() != enc_codepage) +# ifdef FEAT_MBYTE + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) { findrep_atow(&s_findrep_struct_w, &s_findrep_struct); s_findrep_hwnd = ReplaceTextW( @@ -3466,11 +3426,7 @@ static LPCSTR mshape_idcs[] = IDC_SIZEWE, /* leftright */ IDC_SIZEWE, /* lrsizing */ IDC_WAIT, /* busy */ -#ifdef WIN3264 IDC_NO, /* no */ -#else - IDC_ICON, /* no */ -#endif IDC_ARROW, /* crosshair */ IDC_ARROW, /* hand1 */ IDC_ARROW, /* hand2 */ @@ -3497,11 +3453,7 @@ mch_set_mouse_shape(int shape) #ifdef SetClassLongPtr SetClassLongPtr(s_textArea, GCLP_HCURSOR, (__int3264)(LONG_PTR)LoadCursor(NULL, idc)); #else -# ifdef WIN32 SetClassLong(s_textArea, GCL_HCURSOR, (long_u)LoadCursor(NULL, idc)); -# else /* Win16 */ - SetClassWord(s_textArea, GCW_HCURSOR, (WORD)LoadCursor(NULL, idc)); -# endif #endif if (!p_mh) { @@ -3523,7 +3475,7 @@ mch_set_mouse_shape(int shape) * Windows NT/2000/XP the "W" functions are used. */ -# if defined(FEAT_MBYTE) && defined(WIN3264) +# ifdef FEAT_MBYTE /* * Wide version of convert_filter(). */ @@ -3728,17 +3680,15 @@ gui_mch_browse( char_u *initdir, char_u *filter) { +# ifdef FEAT_MBYTE + return gui_mch_browseW(saving, title, dflt, ext, initdir, filter); +# else OPENFILENAME fileStruct; char_u fileBuf[MAXPATHL]; char_u *initdirp = NULL; char_u *filterp; char_u *p; -# if defined(FEAT_MBYTE) && defined(WIN3264) - if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT) - return gui_mch_browseW(saving, title, dflt, ext, initdir, filter); -# endif - if (dflt == NULL) fileBuf[0] = NUL; else @@ -3748,12 +3698,12 @@ gui_mch_browse( filterp = convert_filter(filter); vim_memset(&fileStruct, 0, sizeof(OPENFILENAME)); -#ifdef OPENFILENAME_SIZE_VERSION_400 +# ifdef OPENFILENAME_SIZE_VERSION_400 /* be compatible with Windows NT 4.0 */ fileStruct.lStructSize = OPENFILENAME_SIZE_VERSION_400; -#else +# else fileStruct.lStructSize = sizeof(fileStruct); -#endif +# endif fileStruct.lpstrTitle = (LPSTR)title; fileStruct.lpstrDefExt = (LPSTR)ext; @@ -3783,10 +3733,10 @@ gui_mch_browse( * Don't use OFN_OVERWRITEPROMPT, Vim has its own ":confirm" dialog. */ fileStruct.Flags = (OFN_NOCHANGEDIR | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY); -#ifdef FEAT_SHORTCUT +# ifdef FEAT_SHORTCUT if (curbuf->b_p_bin) fileStruct.Flags |= OFN_NODEREFERENCELINKS; -#endif +# endif if (saving) { if (!GetSaveFileName(&fileStruct)) @@ -3806,6 +3756,7 @@ gui_mch_browse( /* Shorten the file name if possible */ return vim_strsave(shorten_fname1((char_u *)fileBuf)); +# endif } #endif /* FEAT_BROWSE */ @@ -3816,16 +3767,11 @@ gui_mch_browse( HDROP hDrop) { #ifdef FEAT_WINDOWS -#ifdef WIN3264 # define BUFPATHLEN _MAX_PATH # define DRAGQVAL 0xFFFFFFFF -#else -# define BUFPATHLEN MAXPATHL -# define DRAGQVAL 0xFFFF -#endif -#ifdef FEAT_MBYTE +# ifdef FEAT_MBYTE WCHAR wszFile[BUFPATHLEN]; -#endif +# endif char szFile[BUFPATHLEN]; UINT cFiles = DragQueryFile(hDrop, DRAGQVAL, NULL, 0); UINT i; @@ -3846,11 +3792,11 @@ gui_mch_browse( if (fnames != NULL) for (i = 0; i < cFiles; ++i) { -#ifdef FEAT_MBYTE +# ifdef FEAT_MBYTE if (DragQueryFileW(hDrop, i, wszFile, BUFPATHLEN) > 0) fnames[i] = utf16_to_enc(wszFile, NULL); else -#endif +# endif { DragQueryFile(hDrop, i, szFile, BUFPATHLEN); fnames[i] = vim_strsave((char_u *)szFile); @@ -3888,14 +3834,10 @@ gui_mch_browse( long val; int dragging = FALSE; int dont_scroll_save = dont_scroll; -#ifndef WIN3264 - int nPos; -#else SCROLLINFO si; si.cbSize = sizeof(si); si.fMask = SIF_POS; -#endif sb = gui_mswin_find_scrollbar(hwndCtl); if (sb == NULL) @@ -3960,13 +3902,8 @@ gui_mch_browse( } prev_code = code; -#ifdef WIN3264 si.nPos = (sb->scroll_shift > 0) ? val >> sb->scroll_shift : val; SetScrollInfo(hwndCtl, SB_CTL, &si, TRUE); -#else - nPos = (sb->scroll_shift > 0) ? val >> sb->scroll_shift : val; - SetScrollPos(hwndCtl, SB_CTL, nPos, TRUE); -#endif /* * When moving a vertical scrollbar, move the other vertical scrollbar too. @@ -3976,11 +3913,7 @@ gui_mch_browse( scrollbar_T *sba = sb->wp->w_scrollbars; HWND id = sba[ (sb == sba + SBAR_LEFT) ? SBAR_RIGHT : SBAR_LEFT].id; -#ifdef WIN3264 SetScrollInfo(id, SB_CTL, &si, TRUE); -#else - SetScrollPos(id, SB_CTL, nPos, TRUE); -#endif } /* Don't let us be interrupted here by another message. */ @@ -4448,7 +4381,6 @@ static int dialog_default_button = -1; /* Intellimouse support */ static int mouse_scroll_lines = 0; -static UINT msh_msgmousewheel = 0; static int s_usenewlook; /* emulate W95/NT4 non-bold dialogs */ #ifdef FEAT_TOOLBAR @@ -4505,34 +4437,6 @@ static void dyn_imm_load(void); # define pImmSetConversionStatus ImmSetConversionStatus #endif -/* multi monitor support */ -typedef struct _MONITORINFOstruct -{ - DWORD cbSize; - RECT rcMonitor; - RECT rcWork; - DWORD dwFlags; -} _MONITORINFO; - -typedef HANDLE _HMONITOR; -typedef _HMONITOR (WINAPI *TMonitorFromWindow)(HWND, DWORD); -typedef BOOL (WINAPI *TGetMonitorInfo)(_HMONITOR, _MONITORINFO *); - -static TMonitorFromWindow pMonitorFromWindow = NULL; -static TGetMonitorInfo pGetMonitorInfo = NULL; -static HANDLE user32_lib = NULL; -/* - * Return TRUE when running under Windows NT 3.x or Win32s, both of which have - * less fancy GUI APIs. - */ - static int -is_winnt_3(void) -{ - return ((os_version.dwPlatformId == VER_PLATFORM_WIN32_NT - && os_version.dwMajorVersion == 3) - || (os_version.dwPlatformId == VER_PLATFORM_WIN32s)); -} - #ifdef FEAT_MENU /* * Figure out how high the menu bar is at the moment. @@ -4564,45 +4468,20 @@ gui_mswin_get_menu_height( } else { - if (is_winnt_3()) /* for NT 3.xx */ - { - if (gui.starting) - menu_height = GetSystemMetrics(SM_CYMENU); - else - { - RECT r1, r2; - int frameht = GetSystemMetrics(SM_CYFRAME); - int capht = GetSystemMetrics(SM_CYCAPTION); - - /* get window rect of s_hwnd - * get client rect of s_hwnd - * get cap height - * subtract from window rect, the sum of client height, - * (if not maximized)frame thickness, and caption height. - */ - GetWindowRect(s_hwnd, &r1); - GetClientRect(s_hwnd, &r2); - menu_height = r1.bottom - r1.top - (r2.bottom - r2.top - + 2 * frameht * (!IsZoomed(s_hwnd)) + capht); - } - } - else /* win95 and variants (NT 4.0, I guess) */ - { - /* - * In case 'lines' is set in _vimrc/_gvimrc window width doesn't - * seem to have been set yet, so menu wraps in default window - * width which is very narrow. Instead just return height of a - * single menu item. Will still be wrong when the menu really - * should wrap over more than one line. - */ - GetMenuItemRect(s_hwnd, s_menuBar, 0, &rc1); - if (gui.starting) - menu_height = rc1.bottom - rc1.top + 1; - else - { - GetMenuItemRect(s_hwnd, s_menuBar, num - 1, &rc2); - menu_height = rc2.bottom - rc1.top + 1; - } + /* + * In case 'lines' is set in _vimrc/_gvimrc window width doesn't + * seem to have been set yet, so menu wraps in default window + * width which is very narrow. Instead just return height of a + * single menu item. Will still be wrong when the menu really + * should wrap over more than one line. + */ + GetMenuItemRect(s_hwnd, s_menuBar, 0, &rc1); + if (gui.starting) + menu_height = rc1.bottom - rc1.top + 1; + else + { + GetMenuItemRect(s_hwnd, s_menuBar, num - 1, &rc2); + menu_height = rc2.bottom - rc1.top + 1; } } @@ -4636,42 +4515,11 @@ init_mouse_wheel(void) #define VMSH_MOUSEWHEEL "MSWHEEL_ROLLMSG" #define VMSH_SCROLL_LINES "MSH_SCROLL_LINES_MSG" - HWND hdl_mswheel; - UINT msh_msgscrolllines; - - msh_msgmousewheel = 0; mouse_scroll_lines = 3; /* reasonable default */ - if ((os_version.dwPlatformId == VER_PLATFORM_WIN32_NT - && os_version.dwMajorVersion >= 4) - || (os_version.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS - && ((os_version.dwMajorVersion == 4 - && os_version.dwMinorVersion >= 10) - || os_version.dwMajorVersion >= 5))) - { - /* if NT 4.0+ (or Win98) get scroll lines directly from system */ - SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, - &mouse_scroll_lines, 0); - } - else if (os_version.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS - || (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT - && os_version.dwMajorVersion < 4)) - { /* - * If Win95 or NT 3.51, - * try to find the hidden point32 window. - */ - hdl_mswheel = FindWindow(VMOUSEZ_CLASSNAME, VMOUSEZ_TITLE); - if (hdl_mswheel) - { - msh_msgscrolllines = RegisterWindowMessage(VMSH_SCROLL_LINES); - if (msh_msgscrolllines) - { - mouse_scroll_lines = (int)SendMessage(hdl_mswheel, - msh_msgscrolllines, 0, 0); - msh_msgmousewheel = RegisterWindowMessage(VMSH_MOUSEWHEEL); - } - } - } + /* if NT 4.0+ (or Win98) get scroll lines directly from system */ + SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, + &mouse_scroll_lines, 0); } @@ -5210,13 +5058,8 @@ set_tabline_font(void) #endif default: - if (uMsg == msh_msgmousewheel && msh_msgmousewheel != 0) - { /* handle MSH_MOUSEWHEEL messages for Intellimouse */ - _OnMouseWheel(hwnd, HIWORD(wParam)); - return 0L; - } #ifdef MSWIN_FIND_REPLACE - else if (uMsg == s_findrep_msg && s_findrep_msg != 0) + if (uMsg == s_findrep_msg && s_findrep_msg != 0) { _OnFindRepl(); } @@ -5376,42 +5219,6 @@ gui_mch_prepare(int *argc, char **argv) } } #endif - - /* get the OS version info */ - os_version.dwOSVersionInfoSize = sizeof(os_version); - GetVersionEx(&os_version); /* this call works on Win32s, Win95 and WinNT */ - - /* try and load the user32.dll library and get the entry points for - * multi-monitor-support. */ - if ((user32_lib = vimLoadLib("User32.dll")) != NULL) - { - pMonitorFromWindow = (TMonitorFromWindow)GetProcAddress(user32_lib, - "MonitorFromWindow"); - - /* there are ...A and ...W version of GetMonitorInfo - looking at - * winuser.h, they have exactly the same declaration. */ - pGetMonitorInfo = (TGetMonitorInfo)GetProcAddress(user32_lib, - "GetMonitorInfoA"); - } - -#ifdef FEAT_MBYTE - /* If the OS is Windows NT, use wide functions; - * this enables common dialogs input unicode from IME. */ - if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT) - { - pDispatchMessage = DispatchMessageW; - pGetMessage = GetMessageW; - pIsDialogMessage = IsDialogMessageW; - pPeekMessage = PeekMessageW; - } - else - { - pDispatchMessage = DispatchMessageA; - pGetMessage = GetMessageA; - pIsDialogMessage = IsDialogMessageA; - pPeekMessage = PeekMessageA; - } -#endif } /* @@ -5475,12 +5282,7 @@ gui_mch_init(void) atom = #endif RegisterClassW(&wndclassw)) == 0) - { - if (GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) - return FAIL; - - /* Must be Windows 98, fall back to non-wide function. */ - } + return FAIL; else wide_WindowProc = TRUE; } @@ -5710,7 +5512,7 @@ gui_mch_init(void) s_findrep_struct.lpstrReplaceWith[0] = NUL; s_findrep_struct.wFindWhatLen = MSWIN_FR_BUFSIZE; s_findrep_struct.wReplaceWithLen = MSWIN_FR_BUFSIZE; -# if defined(FEAT_MBYTE) && defined(WIN3264) +# ifdef FEAT_MBYTE s_findrep_struct_w.lStructSize = sizeof(s_findrep_struct_w); s_findrep_struct_w.lpstrFindWhat = (LPWSTR)alloc(MSWIN_FR_BUFSIZE * sizeof(WCHAR)); @@ -5753,22 +5555,18 @@ theend: static void get_work_area(RECT *spi_rect) { - _HMONITOR mon; - _MONITORINFO moninfo; - - /* use these functions only if available */ - if (pMonitorFromWindow != NULL && pGetMonitorInfo != NULL) - { - /* work out which monitor the window is on, and get *it's* work area */ - mon = pMonitorFromWindow(s_hwnd, 1 /*MONITOR_DEFAULTTOPRIMARY*/); - if (mon != NULL) - { - moninfo.cbSize = sizeof(_MONITORINFO); - if (pGetMonitorInfo(mon, &moninfo)) - { - *spi_rect = moninfo.rcWork; - return; - } + HMONITOR mon; + MONITORINFO moninfo; + + /* work out which monitor the window is on, and get *it's* work area */ + mon = MonitorFromWindow(s_hwnd, 1 /*MONITOR_DEFAULTTOPRIMARY*/); + if (mon != NULL) + { + moninfo.cbSize = sizeof(MONITORINFO); + if (GetMonitorInfo(mon, &moninfo)) + { + *spi_rect = moninfo.rcWork; + return; } } /* this is the old method... */ @@ -6307,29 +6105,10 @@ RevOut( HDC s_hdc, CONST INT *padding) { int ix; - static int special = -1; - - if (special == -1) - { - /* Check windows version: special treatment is needed if it is NT 5 or - * Win98 or higher. */ - if ((os_version.dwPlatformId == VER_PLATFORM_WIN32_NT - && os_version.dwMajorVersion >= 5) - || (os_version.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS - && (os_version.dwMajorVersion > 4 - || (os_version.dwMajorVersion == 4 - && os_version.dwMinorVersion > 0)))) - special = 1; - else - special = 0; - } - - if (special) - for (ix = 0; ix < (int)len; ++ix) - ExtTextOut(s_hdc, col + TEXT_X(ix), row, foptions, - pcliprect, text + ix, 1, padding); - else - ExtTextOut(s_hdc, col, row, foptions, pcliprect, text, len, padding); + + for (ix = 0; ix < (int)len; ++ix) + ExtTextOut(s_hdc, col + TEXT_X(ix), row, foptions, + pcliprect, text + ix, 1, padding); } #endif @@ -6718,63 +6497,50 @@ gui_mch_add_menu( if (menu_is_menubar(menu->name)) { - if (is_winnt_3()) - { - InsertMenu((parent == NULL) ? s_menuBar : parent->submenu_id, - (UINT)pos, MF_POPUP | MF_STRING | MF_BYPOSITION, - (long_u)menu->submenu_id, (LPCTSTR) menu->name); - } - else - { #ifdef FEAT_MBYTE - WCHAR *wn = NULL; - int n; - - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) + WCHAR *wn = NULL; + + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) + { + /* 'encoding' differs from active codepage: convert menu name + * and use wide function */ + wn = enc_to_utf16(menu->name, NULL); + if (wn != NULL) { - /* 'encoding' differs from active codepage: convert menu name - * and use wide function */ - wn = enc_to_utf16(menu->name, NULL); - if (wn != NULL) - { - MENUITEMINFOW infow; - - infow.cbSize = sizeof(infow); - infow.fMask = MIIM_DATA | MIIM_TYPE | MIIM_ID - | MIIM_SUBMENU; - infow.dwItemData = (long_u)menu; - infow.wID = menu->id; - infow.fType = MFT_STRING; - infow.dwTypeData = wn; - infow.cch = (UINT)wcslen(wn); - infow.hSubMenu = menu->submenu_id; - n = InsertMenuItemW((parent == NULL) - ? s_menuBar : parent->submenu_id, - (UINT)pos, TRUE, &infow); - vim_free(wn); - if (n == 0 && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - /* Failed, try using non-wide function. */ - wn = NULL; - } + MENUITEMINFOW infow; + + infow.cbSize = sizeof(infow); + infow.fMask = MIIM_DATA | MIIM_TYPE | MIIM_ID + | MIIM_SUBMENU; + infow.dwItemData = (long_u)menu; + infow.wID = menu->id; + infow.fType = MFT_STRING; + infow.dwTypeData = wn; + infow.cch = (UINT)wcslen(wn); + infow.hSubMenu = menu->submenu_id; + InsertMenuItemW((parent == NULL) + ? s_menuBar : parent->submenu_id, + (UINT)pos, TRUE, &infow); + vim_free(wn); } - - if (wn == NULL) -#endif - { - MENUITEMINFO info; - - info.cbSize = sizeof(info); - info.fMask = MIIM_DATA | MIIM_TYPE | MIIM_ID | MIIM_SUBMENU; - info.dwItemData = (long_u)menu; - info.wID = menu->id; - info.fType = MFT_STRING; - info.dwTypeData = (LPTSTR)menu->name; - info.cch = (UINT)STRLEN(menu->name); - info.hSubMenu = menu->submenu_id; - InsertMenuItem((parent == NULL) - ? s_menuBar : parent->submenu_id, - (UINT)pos, TRUE, &info); - } + } + + if (wn == NULL) +#endif + { + MENUITEMINFO info; + + info.cbSize = sizeof(info); + info.fMask = MIIM_DATA | MIIM_TYPE | MIIM_ID | MIIM_SUBMENU; + info.dwItemData = (long_u)menu; + info.wID = menu->id; + info.fType = MFT_STRING; + info.dwTypeData = (LPTSTR)menu->name; + info.cch = (UINT)STRLEN(menu->name); + info.hSubMenu = menu->submenu_id; + InsertMenuItem((parent == NULL) + ? s_menuBar : parent->submenu_id, + (UINT)pos, TRUE, &info); } } @@ -6890,7 +6656,6 @@ gui_mch_add_menu_item( { #ifdef FEAT_MBYTE WCHAR *wn = NULL; - int n; if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) { @@ -6899,14 +6664,11 @@ gui_mch_add_menu_item( wn = enc_to_utf16(menu->name, NULL); if (wn != NULL) { - n = InsertMenuW(parent->submenu_id, (UINT)idx, + InsertMenuW(parent->submenu_id, (UINT)idx, (menu_is_separator(menu->name) ? MF_SEPARATOR : MF_STRING) | MF_BYPOSITION, (UINT)menu->id, wn); vim_free(wn); - if (n == 0 && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - /* Failed, try using non-wide function. */ - wn = NULL; } } if (wn == NULL) @@ -7105,11 +6867,10 @@ dialog_callback( /* If the edit box exists, copy the string. */ if (s_textfield != NULL) { -# if defined(FEAT_MBYTE) && defined(WIN3264) +# ifdef FEAT_MBYTE /* If the OS is Windows NT, and 'encoding' differs from active * codepage: use wide function and convert text. */ - if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT - && enc_codepage >= 0 && (int)GetACP() != enc_codepage) + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) { WCHAR *wp = (WCHAR *)alloc(IOSIZE * sizeof(WCHAR)); char_u *p; @@ -7866,38 +7627,31 @@ get_dialog_font_metrics(void) s_usenewlook = FALSE; - /* - * For NT3.51 and Win32s, we stick with the old look - * because it matches everything else. - */ - if (!is_winnt_3()) - { #ifdef USE_SYSMENU_FONT - if (gui_w32_get_menu_font(&lfSysmenu) == OK) - hfontTools = CreateFontIndirect(&lfSysmenu); - else + if (gui_w32_get_menu_font(&lfSysmenu) == OK) + hfontTools = CreateFontIndirect(&lfSysmenu); + else #endif hfontTools = CreateFont(-DLG_FONT_POINT_SIZE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VARIABLE_PITCH , DLG_FONT_NAME); - if (hfontTools) - { - hdc = GetDC(s_hwnd); - SelectObject(hdc, hfontTools); - /* - * GetTextMetrics() doesn't return the right value in - * tmAveCharWidth, so we have to figure out the dialog base units - * ourselves. - */ - GetTextExtentPoint(hdc, - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", - 52, &size); - ReleaseDC(s_hwnd, hdc); - - s_dlgfntwidth = (WORD)((size.cx / 26 + 1) / 2); - s_dlgfntheight = (WORD)size.cy; - s_usenewlook = TRUE; - } + if (hfontTools) + { + hdc = GetDC(s_hwnd); + SelectObject(hdc, hfontTools); + /* + * GetTextMetrics() doesn't return the right value in + * tmAveCharWidth, so we have to figure out the dialog base units + * ourselves. + */ + GetTextExtentPoint(hdc, + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", + 52, &size); + ReleaseDC(s_hwnd, hdc); + + s_dlgfntwidth = (WORD)((size.cx / 26 + 1) / 2); + s_dlgfntheight = (WORD)size.cy; + s_usenewlook = TRUE; } if (!s_usenewlook) @@ -8044,10 +7798,6 @@ gui_mch_tearoff( dlgwidth = textWidth; dlgwidth += 2 * TEAROFF_PADDING_X + TEAROFF_BUTTON_PAD_X; - /* W95 can't do thin dialogs, they look v. weird! */ - if (mch_windows95() && dlgwidth < TEAROFF_MIN_WIDTH) - dlgwidth = TEAROFF_MIN_WIDTH; - /* start to fill in the dlgtemplate information. addressing by WORDs */ if (s_usenewlook) lStyle = DS_MODALFRAME | WS_CAPTION| WS_SYSMENU |DS_SETFONT| WS_VISIBLE; @@ -8299,7 +8049,7 @@ get_toolbar_bitmap(vimmenu_T *menu) /* * Check user bitmaps first, unless builtin is specified. */ - if (!is_winnt_3() && !menu->icon_builtin) + if (!menu->icon_builtin) { char_u fname[MAXPATHL]; HANDLE hbitmap = NULL; @@ -8556,12 +8306,6 @@ gui_mch_register_sign(char_u *signfile) signicon_t sign, *psign; char_u *ext; - if (is_winnt_3()) - { - EMSG(_(e_signdata)); - return NULL; - } - sign.hImage = NULL; ext = signfile + STRLEN(signfile) - 4; /* get extension */ if (ext > signfile) diff --git a/src/if_cscope.c b/src/if_cscope.c --- a/src/if_cscope.c +++ b/src/if_cscope.c @@ -839,14 +839,10 @@ cs_create_connection(int i) HANDLE stdin_rd, stdout_rd; HANDLE stdout_wr, stdin_wr; BOOL created; -# ifdef __BORLANDC__ -# define OPEN_OH_ARGTYPE long +# if (defined(_MSC_VER) && (_MSC_VER >= 1300)) || defined(__MINGW32__) +# define OPEN_OH_ARGTYPE intptr_t # else -# if (_MSC_VER >= 1300) || defined(__MINGW32__) -# define OPEN_OH_ARGTYPE intptr_t -# else -# define OPEN_OH_ARGTYPE long -# endif +# define OPEN_OH_ARGTYPE long # endif #endif @@ -1427,11 +1423,8 @@ cs_insert_filelist( #ifndef UNIX BY_HANDLE_FILE_INFORMATION bhfi; - /* On windows 9x GetFileInformationByHandle doesn't work, so skip it */ - if (!mch_windows95()) + switch (win32_fileinfo((char_u *)fname, &bhfi)) { - switch (win32_fileinfo((char_u *)fname, &bhfi)) - { case FILEINFO_ENC_FAIL: /* enc_to_utf16() failed */ case FILEINFO_READ_FAIL: /* CreateFile() failed */ if (p_csverbose) @@ -1454,7 +1447,6 @@ cs_insert_filelist( if (p_csverbose) (void)EMSG(_("E626: cannot get cscope database information")); return -1; - } } #endif @@ -1468,9 +1460,8 @@ cs_insert_filelist( /* compare pathnames first */ && ((fullpathcmp((char_u *)csinfo[j].fname, (char_u *)fname, FALSE) & FPC_SAME) - /* if not Windows 9x, test index file attributes too */ - || (!mch_windows95() - && csinfo[j].nVolume == bhfi.dwVolumeSerialNumber + /* test index file attributes too */ + || (csinfo[j].nVolume == bhfi.dwVolumeSerialNumber && csinfo[j].nIndexHigh == bhfi.nFileIndexHigh && csinfo[j].nIndexLow == bhfi.nFileIndexLow)) #endif diff --git a/src/misc1.c b/src/misc1.c --- a/src/misc1.c +++ b/src/misc1.c @@ -9450,10 +9450,7 @@ prepare_to_exit(void) * screen (if there are two screens). */ settmode(TMODE_COOK); -#ifdef WIN3264 - if (can_end_termcap_mode(FALSE) == TRUE) -#endif - stoptermcap(); + stoptermcap(); out_flush(); } } diff --git a/src/misc2.c b/src/misc2.c --- a/src/misc2.c +++ b/src/misc2.c @@ -1420,7 +1420,7 @@ vim_strsave_shellescape(char_u *string, length = (unsigned)STRLEN(string) + 3; /* two quotes and a trailing NUL */ for (p = string; *p != NUL; mb_ptr_adv(p)) { -# if defined(WIN32) || defined(DOS) +# ifdef WIN32 if (!p_ssl) { if (*p == '"') @@ -1451,7 +1451,7 @@ vim_strsave_shellescape(char_u *string, d = escaped_string; /* add opening quote */ -# if defined(WIN32) || defined(DOS) +# ifdef WIN32 if (!p_ssl) *d++ = '"'; else @@ -1460,7 +1460,7 @@ vim_strsave_shellescape(char_u *string, for (p = string; *p != NUL; ) { -# if defined(WIN32) || defined(DOS) +# ifdef WIN32 if (!p_ssl) { if (*p == '"') @@ -1503,7 +1503,7 @@ vim_strsave_shellescape(char_u *string, } /* add terminating quote and finish with a NUL */ -# if defined(WIN32) || defined(DOS) +# ifdef WIN32 if (!p_ssl) *d++ = '"'; else diff --git a/src/option.c b/src/option.c --- a/src/option.c +++ b/src/option.c @@ -22,7 +22,7 @@ * - If it's a list of flags, add some code in do_set(), search for WW_ALL. * - When adding an option with expansion (P_EXPAND), but with a different * default for Vi and Vim (no P_VI_DEF), add some code at VIMEXP. - * - Add documentation! One line in doc/help.txt, full description in + * - Add documentation! One line in doc/quickref.txt, full description in * options.txt, and any other related places. * - Add an entry in runtime/optwin.vim. * When making changes: @@ -9944,13 +9944,7 @@ clear_termoptions(void) if (gui.starting) clear_xterm_clip(); #endif -#ifdef WIN3264 - /* - * Check if this is allowed now. - */ - if (can_end_termcap_mode(FALSE) == TRUE) -#endif - stoptermcap(); /* stop termcap mode */ + stoptermcap(); /* stop termcap mode */ free_termoptions(); } diff --git a/src/os_mswin.c b/src/os_mswin.c --- a/src/os_mswin.c +++ b/src/os_mswin.c @@ -38,11 +38,7 @@ # if defined(FEAT_PRINTER) && !defined(FEAT_POSTSCRIPT) # include -# ifdef WIN3264 -# include -# else -# include -# endif +# include # include #endif @@ -130,10 +126,6 @@ typedef void VOID; FILE* fdDump = NULL; #endif -#ifdef WIN3264 -extern DWORD g_PlatformId; -#endif - #ifndef FEAT_GUI_MSWIN extern char g_szOrigTitle[]; #endif @@ -248,20 +240,13 @@ mch_early_init(void) { int i; -#ifdef WIN3264 PlatformId(); -#endif /* Init the tables for toupper() and tolower() */ for (i = 0; i < 256; ++i) toupper_tab[i] = tolower_tab[i] = i; -#ifdef WIN3264 CharUpperBuff((LPSTR)toupper_tab, 256); CharLowerBuff((LPSTR)tolower_tab, 256); -#else - AnsiUpperBuff((LPSTR)toupper_tab, 256); - AnsiLowerBuff((LPSTR)tolower_tab, 256); -#endif } @@ -299,14 +284,12 @@ mch_settitle( { /* Convert the title from 'encoding' to the active codepage. */ WCHAR *wp = enc_to_utf16(title, NULL); - int n; if (wp != NULL) { - n = SetConsoleTitleW(wp); + SetConsoleTitleW(wp); vim_free(wp); - if (n != 0 || GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) - return; + return; } } # endif @@ -379,12 +362,7 @@ mch_FullName( #endif { #ifdef FEAT_MBYTE - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage -# ifdef __BORLANDC__ - /* Wide functions of Borland C 5.5 do not work on Windows 98. */ - && g_PlatformId == VER_PLATFORM_WIN32_NT -# endif - ) + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) { WCHAR *wname; WCHAR wbuf[MAX_PATH]; @@ -641,12 +619,7 @@ vim_stat(const char *name, stat_T *stp) } } #ifdef FEAT_MBYTE - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage -# ifdef __BORLANDC__ - /* Wide functions of Borland C 5.5 do not work on Windows 98. */ - && g_PlatformId == VER_PLATFORM_WIN32_NT -# endif - ) + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) { WCHAR *wp = enc_to_utf16(buf, NULL); int n; @@ -655,11 +628,7 @@ vim_stat(const char *name, stat_T *stp) { n = wstat_symlink_aware(wp, stp); vim_free(wp); - if (n >= 0 || g_PlatformId == VER_PLATFORM_WIN32_NT) - return n; - /* Retry with non-wide function (for Windows 98). Can't use - * GetLastError() here and it's unclear what errno gets set to if - * the _wstat() fails for missing wide functions. */ + return n; } } #endif @@ -823,9 +792,7 @@ mch_chdir(char *path) { n = _wchdir(p); vim_free(p); - if (n == 0 || g_PlatformId == VER_PLATFORM_WIN32_NT) - return n; - /* Retry with non-wide function (for Windows 98). */ + return n; } } #endif @@ -834,27 +801,6 @@ mch_chdir(char *path) } -/* - * Switching off termcap mode is only allowed when Columns is 80, otherwise a - * crash may result. It's always allowed on NT or when running the GUI. - */ -/*ARGSUSED*/ - int -can_end_termcap_mode( - int give_msg) -{ -#ifdef FEAT_GUI_MSWIN - return TRUE; /* GUI starts a new console anyway */ -#else - if (g_PlatformId == VER_PLATFORM_WIN32_NT || Columns == 80) - return TRUE; - if (give_msg) - msg((char_u *) - _("'columns' is not 80, cannot execute external commands")); - return FALSE; -#endif -} - #ifdef FEAT_GUI_MSWIN /* * return non-zero if a character is available @@ -887,17 +833,10 @@ mch_screenmode( * and returns an allocated string. * Return OK if it worked, FAIL if not. */ -# ifdef WIN3264 typedef LPTSTR (*MYSTRPROCSTR)(LPTSTR); typedef LPTSTR (*MYINTPROCSTR)(int); typedef int (*MYSTRPROCINT)(LPTSTR); typedef int (*MYINTPROCINT)(int); -# else -typedef LPSTR (*MYSTRPROCSTR)(LPSTR); -typedef LPSTR (*MYINTPROCSTR)(int); -typedef int (*MYSTRPROCINT)(LPSTR); -typedef int (*MYINTPROCINT)(int); -# endif /* * Check if a pointer points to a valid NUL terminated string. @@ -1093,7 +1032,7 @@ Trace( #endif //_DEBUG #if !defined(FEAT_GUI) || defined(PROTO) -# if defined(FEAT_TITLE) && defined(WIN3264) +# ifdef FEAT_TITLE extern HWND g_hWnd; /* This is in os_win32.c. */ # endif @@ -1114,7 +1053,7 @@ GetConsoleHwnd(void) if (s_hwnd != 0) return; -# if defined(FEAT_TITLE) && defined(WIN3264) +# ifdef FEAT_TITLE /* Window handle may have been found by init code (Windows NT only) */ if (g_hWnd != 0) { @@ -1539,7 +1478,6 @@ mch_print_init(prt_settings_T *psettings ) { prt_dlg.Flags |= PD_RETURNDEFAULT; -#ifdef WIN3264 /* * MSDN suggests setting the first parameter to WINSPOOL for * NT, but NULL appears to work just as well. @@ -1547,7 +1485,6 @@ mch_print_init(prt_settings_T *psettings if (*p_pdev != NUL) prt_dlg.hDC = CreateDC(NULL, (LPCSTR)p_pdev, NULL, NULL); else -#endif { prt_dlg.Flags |= PD_RETURNDEFAULT; if (PrintDlg(&prt_dlg) == 0) @@ -1593,10 +1530,8 @@ mch_print_init(prt_settings_T *psettings mem = (DEVMODE *)GlobalLock(prt_dlg.hDevMode); if (mem != NULL) { -#ifdef WIN3264 if (mem->dmCopies != 1) stored_nCopies = mem->dmCopies; -#endif if ((mem->dmFields & DM_DUPLEX) && (mem->dmDuplex & ~DMDUP_SIMPLEX)) psettings->duplex = TRUE; if ((mem->dmFields & DM_COLOR) && (mem->dmColor & DMCOLOR_COLOR)) @@ -1953,7 +1888,7 @@ shortcut_errorw: goto shortcut_end; } } - /* Retry with non-wide function (for Windows 98). */ + goto shortcut_end; } # endif // create a link manager object and request its interface @@ -2681,7 +2616,6 @@ charset_pairs[] = {"OEM", OEM_CHARSET}, {"SHIFTJIS", SHIFTJIS_CHARSET}, {"SYMBOL", SYMBOL_CHARSET}, -#ifdef WIN3264 {"ARABIC", ARABIC_CHARSET}, {"BALTIC", BALTIC_CHARSET}, {"EASTEUROPE", EASTEUROPE_CHARSET}, @@ -2693,10 +2627,8 @@ charset_pairs[] = {"RUSSIAN", RUSSIAN_CHARSET}, {"THAI", THAI_CHARSET}, {"TURKISH", TURKISH_CHARSET}, -# if (!defined(_MSC_VER) || (_MSC_VER > 1010)) \ - && (!defined(__BORLANDC__) || (__BORLANDC__ > 0x0500)) +#ifdef VIETNAMESE_CHARSET {"VIETNAMESE", VIETNAMESE_CHARSET}, -# endif #endif {NULL, 0} }; diff --git a/src/os_win32.c b/src/os_win32.c --- a/src/os_win32.c +++ b/src/os_win32.c @@ -141,43 +141,11 @@ typedef int LPSECURITY_ATTRIBUTES; # define __stdcall /* empty */ #endif -#ifndef FEAT_GUI_W32 -/* Undocumented API in kernel32.dll needed to work around dead key bug in - * console-mode applications in NT 4.0. If you switch keyboard layouts - * in a console app to a layout that includes dead keys and then hit a - * dead key, a call to ToAscii will trash the stack. My thanks to Ian James - * and Michael Dietrich for helping me figure out this workaround. - */ - -/* WINAPI BOOL WINAPI GetConsoleKeyboardLayoutNameA(LPSTR); */ -#ifndef WINAPI -# define WINAPI __stdcall -#endif -#if defined(__BORLANDC__) -typedef BOOL (__stdcall *PFNGCKLN)(LPSTR); -#else -typedef BOOL (WINAPI *PFNGCKLN)(LPSTR); -#endif -static PFNGCKLN s_pfnGetConsoleKeyboardLayoutName = NULL; -#endif - #if defined(__BORLANDC__) /* Strangely Borland uses a non-standard name. */ # define wcsicmp(a, b) wcscmpi((a), (b)) #endif -#ifndef PROTO - -/* Enable common dialogs input unicode from IME if possible. */ -#ifdef FEAT_MBYTE -LRESULT (WINAPI *pDispatchMessage)(CONST MSG *) = DispatchMessage; -BOOL (WINAPI *pGetMessage)(LPMSG, HWND, UINT, UINT) = GetMessage; -BOOL (WINAPI *pIsDialogMessage)(HWND, LPMSG) = IsDialogMessage; -BOOL (WINAPI *pPeekMessage)(LPMSG, HWND, UINT, UINT, UINT) = PeekMessage; -#endif - -#endif /* PROTO */ - #ifndef FEAT_GUI_W32 /* Win32 Console handles for input and output */ static HANDLE g_hConIn = INVALID_HANDLE_VALUE; @@ -430,7 +398,6 @@ unescape_shellxquote(char_u *p, char_u * vimLoadLib(char *name) { HINSTANCE dll = NULL; - char old_dir[MAXPATHL]; /* NOTE: Do not use mch_dirname() and mch_chdir() here, they may call * vimLoadLib() recursively, which causes a stack overflow. */ @@ -438,7 +405,6 @@ vimLoadLib(char *name) get_exe_name(); if (exe_path != NULL) { -#ifdef FEAT_MBYTE WCHAR old_dirw[MAXPATHL]; if (GetCurrentDirectoryW(MAXPATHL, old_dirw) != 0) @@ -451,18 +417,6 @@ vimLoadLib(char *name) SetCurrentDirectoryW(old_dirw); return dll; } - /* Retry with non-wide function (for Windows 98). */ - if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) -#endif - if (GetCurrentDirectory(MAXPATHL, old_dir) != 0) - { - /* Change directory to where the executable is, both to make - * sure we find a .dll there and to avoid looking for a .dll - * in the current directory. */ - SetCurrentDirectory((LPCSTR)exe_path); - dll = LoadLibrary(name); - SetCurrentDirectory(old_dir); - } } return dll; } @@ -621,38 +575,8 @@ DWORD g_PlatformId; # ifndef PROTECTED_DACL_SECURITY_INFORMATION # define PROTECTED_DACL_SECURITY_INFORMATION 0x80000000L # endif - -/* - * These are needed to dynamically load the ADVAPI DLL, which is not - * implemented under Windows 95 (and causes VIM to crash) - */ -typedef DWORD (WINAPI *PSNSECINFO) (LPSTR, SE_OBJECT_TYPE, - SECURITY_INFORMATION, PSID, PSID, PACL, PACL); -typedef DWORD (WINAPI *PGNSECINFO) (LPSTR, SE_OBJECT_TYPE, - SECURITY_INFORMATION, PSID *, PSID *, PACL *, PACL *, - PSECURITY_DESCRIPTOR *); -# ifdef FEAT_MBYTE -typedef DWORD (WINAPI *PSNSECINFOW) (LPWSTR, SE_OBJECT_TYPE, - SECURITY_INFORMATION, PSID, PSID, PACL, PACL); -typedef DWORD (WINAPI *PGNSECINFOW) (LPWSTR, SE_OBJECT_TYPE, - SECURITY_INFORMATION, PSID *, PSID *, PACL *, PACL *, - PSECURITY_DESCRIPTOR *); -# endif - -static HANDLE advapi_lib = NULL; /* Handle for ADVAPI library */ -static PSNSECINFO pSetNamedSecurityInfo; -static PGNSECINFO pGetNamedSecurityInfo; -# ifdef FEAT_MBYTE -static PSNSECINFOW pSetNamedSecurityInfoW; -static PGNSECINFOW pGetNamedSecurityInfoW; -# endif #endif -typedef BOOL (WINAPI *PSETHANDLEINFORMATION)(HANDLE, DWORD, DWORD); - -static BOOL allowPiping = FALSE; -static PSETHANDLEINFORMATION pSetHandleInformation; - #ifdef HAVE_ACL /* * Enables or disables the specified privilege. @@ -712,93 +636,13 @@ PlatformId(void) win8_or_later = TRUE; #ifdef HAVE_ACL - /* - * Load the ADVAPI runtime if we are on anything - * other than Windows 95 - */ - if (g_PlatformId == VER_PLATFORM_WIN32_NT) - { - /* - * do this load. Problems: Doesn't unload at end of run (this is - * theoretically okay, since Windows should unload it when VIM - * terminates). Should we be using the 'mch_libcall' routines? - * Seems like a lot of overhead to load/unload ADVAPI32.DLL each - * time we verify security... - */ - advapi_lib = vimLoadLib("ADVAPI32.DLL"); - if (advapi_lib != NULL) - { - pSetNamedSecurityInfo = (PSNSECINFO)GetProcAddress(advapi_lib, - "SetNamedSecurityInfoA"); - pGetNamedSecurityInfo = (PGNSECINFO)GetProcAddress(advapi_lib, - "GetNamedSecurityInfoA"); -# ifdef FEAT_MBYTE - pSetNamedSecurityInfoW = (PSNSECINFOW)GetProcAddress(advapi_lib, - "SetNamedSecurityInfoW"); - pGetNamedSecurityInfoW = (PGNSECINFOW)GetProcAddress(advapi_lib, - "GetNamedSecurityInfoW"); -# endif - if (pSetNamedSecurityInfo == NULL - || pGetNamedSecurityInfo == NULL -# ifdef FEAT_MBYTE - || pSetNamedSecurityInfoW == NULL - || pGetNamedSecurityInfoW == NULL -# endif - ) - { - /* If we can't get the function addresses, set advapi_lib - * to NULL so that we don't use them. */ - FreeLibrary(advapi_lib); - advapi_lib = NULL; - } - /* Enable privilege for getting or setting SACLs. */ - win32_enable_privilege(SE_SECURITY_NAME, TRUE); - } - } + /* Enable privilege for getting or setting SACLs. */ + win32_enable_privilege(SE_SECURITY_NAME, TRUE); #endif - /* - * If we are on windows NT, try to load the pipe functions, only - * available from Win2K. - */ - if (g_PlatformId == VER_PLATFORM_WIN32_NT) - { - HANDLE kernel32 = GetModuleHandle("kernel32"); - pSetHandleInformation = (PSETHANDLEINFORMATION)GetProcAddress( - kernel32, "SetHandleInformation"); - - allowPiping = pSetHandleInformation != NULL; - } done = TRUE; } } -/* - * Return TRUE when running on Windows 95 (or 98 or ME). - * Only to be used after mch_init(). - */ - int -mch_windows95(void) -{ - return g_PlatformId == VER_PLATFORM_WIN32_WINDOWS; -} - -#ifdef FEAT_GUI_W32 -/* - * Used to work around the "can't do synchronous spawn" - * problem on Win32s, without resorting to Universal Thunk. - */ -static int old_num_windows; -static int num_windows; - -/*ARGSUSED*/ - static BOOL CALLBACK -win32ssynch_cb(HWND hwnd, LPARAM lparam) -{ - num_windows++; - return TRUE; -} -#endif - #ifndef FEAT_GUI_W32 #define SHIFT (SHIFT_PRESSED) @@ -926,15 +770,6 @@ win32_kbd_patch_key( vim_memset(abKeystate, 0, sizeof (abKeystate)); - // Should only be non-NULL on NT 4.0 - if (s_pfnGetConsoleKeyboardLayoutName != NULL) - { - CHAR szKLID[KL_NAMELENGTH]; - - if ((*s_pfnGetConsoleKeyboardLayoutName)(szKLID)) - (void)LoadKeyboardLayout(szKLID, KLF_ACTIVATE); - } - /* Clear any pending dead keys */ ToUnicode(VK_SPACE, MapVirtualKey(VK_SPACE, 0), abKeystate, awAnsiCode, 2, 0); @@ -1977,17 +1812,13 @@ executable_exists(char *name, char_u **p n = (long)SearchPathW(wnewpath, p, NULL, _MAX_PATH, fnamew, &dumw); vim_free(wnewpath); vim_free(p); - if (n > 0 || GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) - { - if (n == 0) - return FALSE; - if (GetFileAttributesW(fnamew) & FILE_ATTRIBUTE_DIRECTORY) - return FALSE; - if (path != NULL) - *path = utf16_to_enc(fnamew, NULL); - return TRUE; - } - /* Retry with non-wide function (for Windows 98). */ + if (n == 0) + return FALSE; + if (GetFileAttributesW(fnamew) & FILE_ATTRIBUTE_DIRECTORY) + return FALSE; + if (path != NULL) + *path = utf16_to_enc(fnamew, NULL); + return TRUE; } } #endif @@ -2462,8 +2293,6 @@ SetConsoleIcon( static void SaveConsoleTitleAndIcon(void) { - GETCONSOLEWINDOWPROC GetConsoleWindowProc; - /* Save the original title. */ if (!GetConsoleTitle(g_szOrigTitle, sizeof(g_szOrigTitle))) return; @@ -2475,12 +2304,7 @@ SaveConsoleTitleAndIcon(void) * 2000. On older operating systems, we can't change the window icon * anyway. */ - if ((GetConsoleWindowProc = (GETCONSOLEWINDOWPROC) - GetProcAddress(GetModuleHandle("KERNEL32.DLL"), - "GetConsoleWindow")) != NULL) - { - g_hWnd = (*GetConsoleWindowProc)(); - } + g_hWnd = GetConsoleWindow(); if (g_hWnd == NULL) return; @@ -2589,11 +2413,6 @@ mch_init(void) #ifdef FEAT_CLIPBOARD win_clip_init(); #endif - - /* This will be NULL on anything but NT 4.0 */ - s_pfnGetConsoleKeyboardLayoutName = - (PFNGCKLN) GetProcAddress(GetModuleHandle("kernel32.dll"), - "GetConsoleKeyboardLayoutNameA"); } /* @@ -2775,9 +2594,6 @@ fname_casew( *porig = c; ptrue = ptruePrev + wcslen(ptruePrev); } - else if (hFind == INVALID_HANDLE_VALUE - && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - return FAIL; } wcscpy(name, szTrueName); @@ -2836,7 +2652,7 @@ fname_case( } } } - /* Retry with non-wide function (for Windows 98). */ + return; } #endif @@ -2966,9 +2782,6 @@ mch_get_user_name( return OK; } } - else if (GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) - return FAIL; - /* Retry with non-wide function (for Windows 98). */ } #endif if (GetUserName(szUserName, &cch)) @@ -3008,9 +2821,6 @@ mch_get_host_name( return; } } - else if (GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) - return; - /* Retry with non-wide function (for Windows 98). */ } #endif if (!GetComputerName((LPSTR)s, &cch)) @@ -3059,9 +2869,7 @@ mch_dirname( return OK; } } - else if (GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) - return FAIL; - /* Retry with non-wide function (for Windows 98). */ + return FAIL; } #endif return (GetCurrentDirectory(len, (LPSTR)buf) != 0 ? OK : FAIL); @@ -3101,9 +2909,8 @@ mch_setperm(char_u *name, long perm) { n = _wchmod(p, perm); vim_free(p); - if (n == -1 && g_PlatformId == VER_PLATFORM_WIN32_NT) + if (n == -1) return FAIL; - /* Retry with non-wide function (for Windows 98). */ } } if (n == -1) @@ -3251,18 +3058,7 @@ mch_is_symbolic_link(char_u *name) { hFind = FindFirstFileW(wn, &findDataW); vim_free(wn); - if (hFind == INVALID_HANDLE_VALUE - && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - /* Retry with non-wide function (for Windows 98). */ - hFind = FindFirstFile((LPCSTR)name, &findDataA); - if (hFind != INVALID_HANDLE_VALUE) - { - fileFlags = findDataA.dwFileAttributes; - reparseTag = findDataA.dwReserved0; - } - } - else + if (hFind != INVALID_HANDLE_VALUE) { fileFlags = findDataW.dwFileAttributes; reparseTag = findDataW.dwReserved0; @@ -3321,7 +3117,7 @@ win32_fileinfo(char_u *fname, BY_HANDLE_ { wn = enc_to_utf16(fname, NULL); if (wn == NULL) - res = FILEINFO_ENC_FAIL; + return FILEINFO_ENC_FAIL; } if (wn != NULL) { @@ -3332,15 +3128,9 @@ win32_fileinfo(char_u *fname, BY_HANDLE_ OPEN_EXISTING, /* creation disposition */ FILE_FLAG_BACKUP_SEMANTICS, /* file attributes */ NULL); /* handle to template file */ - if (hFile == INVALID_HANDLE_VALUE - && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - /* Retry with non-wide function (for Windows 98). */ - vim_free(wn); - wn = NULL; - } + vim_free(wn); } - if (wn == NULL) + else #endif hFile = CreateFile((LPCSTR)fname, /* file name */ GENERIC_READ, /* access mode */ @@ -3359,9 +3149,6 @@ win32_fileinfo(char_u *fname, BY_HANDLE_ CloseHandle(hFile); } -#ifdef FEAT_MBYTE - vim_free(wn); -#endif return res; } @@ -3383,19 +3170,12 @@ win32_getattrs(char_u *name) if (p != NULL) { attr = GetFileAttributesW(p); - if (attr < 0 && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - /* Retry with non-wide function (for Windows 98). */ - vim_free(p); - p = NULL; - } + vim_free(p); } - if (p == NULL) + else #endif attr = GetFileAttributes((char *)name); -#ifdef FEAT_MBYTE - vim_free(p); -#endif + return attr; } @@ -3418,20 +3198,12 @@ win32_setattrs(char_u *name, int attrs) if (p != NULL) { res = SetFileAttributesW(p, attrs); - if (res == FALSE - && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - /* Retry with non-wide function (for Windows 98). */ - vim_free(p); - p = NULL; - } + vim_free(p); } - if (p == NULL) + else #endif res = SetFileAttributes((char *)name, attrs); -#ifdef FEAT_MBYTE - vim_free(p); -#endif + return res ? 0 : -1; } @@ -3539,27 +3311,20 @@ mch_nodetype(char_u *name) #ifdef FEAT_MBYTE if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) + wn = enc_to_utf16(name, NULL); + + if (wn != NULL) { - wn = enc_to_utf16(name, NULL); - if (wn != NULL) - { - hFile = CreateFileW(wn, /* file name */ - GENERIC_WRITE, /* access mode */ - 0, /* share mode */ - NULL, /* security descriptor */ - OPEN_EXISTING, /* creation disposition */ - 0, /* file attributes */ - NULL); /* handle to template file */ - if (hFile == INVALID_HANDLE_VALUE - && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - /* Retry with non-wide function (for Windows 98). */ - vim_free(wn); - wn = NULL; - } - } + hFile = CreateFileW(wn, /* file name */ + GENERIC_WRITE, /* access mode */ + 0, /* share mode */ + NULL, /* security descriptor */ + OPEN_EXISTING, /* creation disposition */ + 0, /* file attributes */ + NULL); /* handle to template file */ + vim_free(wn); } - if (wn == NULL) + else #endif hFile = CreateFile((LPCSTR)name, /* file name */ GENERIC_WRITE, /* access mode */ @@ -3569,9 +3334,6 @@ mch_nodetype(char_u *name) 0, /* file attributes */ NULL); /* handle to template file */ -#ifdef FEAT_MBYTE - vim_free(wn); -#endif if (hFile == INVALID_HANDLE_VALUE) return NODE_NORMAL; @@ -3608,88 +3370,84 @@ mch_get_acl(char_u *fname) struct my_acl *p = NULL; DWORD err; - /* This only works on Windows NT and 2000. */ - if (g_PlatformId == VER_PLATFORM_WIN32_NT && advapi_lib != NULL) + p = (struct my_acl *)alloc_clear((unsigned)sizeof(struct my_acl)); + if (p != NULL) { - p = (struct my_acl *)alloc_clear((unsigned)sizeof(struct my_acl)); - if (p != NULL) +# ifdef FEAT_MBYTE + WCHAR *wn = NULL; + + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) + wn = enc_to_utf16(fname, NULL); + if (wn != NULL) { -# ifdef FEAT_MBYTE - WCHAR *wn = NULL; - - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) - wn = enc_to_utf16(fname, NULL); - if (wn != NULL) + /* Try to retrieve the entire security descriptor. */ + err = GetNamedSecurityInfoW( + wn, // Abstract filename + SE_FILE_OBJECT, // File Object + OWNER_SECURITY_INFORMATION | + GROUP_SECURITY_INFORMATION | + DACL_SECURITY_INFORMATION | + SACL_SECURITY_INFORMATION, + &p->pSidOwner, // Ownership information. + &p->pSidGroup, // Group membership. + &p->pDacl, // Discretionary information. + &p->pSacl, // For auditing purposes. + &p->pSecurityDescriptor); + if (err == ERROR_ACCESS_DENIED || + err == ERROR_PRIVILEGE_NOT_HELD) + { + /* Retrieve only DACL. */ + (void)GetNamedSecurityInfoW( + wn, + SE_FILE_OBJECT, + DACL_SECURITY_INFORMATION, + NULL, + NULL, + &p->pDacl, + NULL, + &p->pSecurityDescriptor); + } + if (p->pSecurityDescriptor == NULL) { - /* Try to retrieve the entire security descriptor. */ - err = pGetNamedSecurityInfoW( - wn, // Abstract filename - SE_FILE_OBJECT, // File Object - OWNER_SECURITY_INFORMATION | - GROUP_SECURITY_INFORMATION | - DACL_SECURITY_INFORMATION | - SACL_SECURITY_INFORMATION, - &p->pSidOwner, // Ownership information. - &p->pSidGroup, // Group membership. - &p->pDacl, // Discretionary information. - &p->pSacl, // For auditing purposes. - &p->pSecurityDescriptor); - if (err == ERROR_ACCESS_DENIED || - err == ERROR_PRIVILEGE_NOT_HELD) - { - /* Retrieve only DACL. */ - (void)pGetNamedSecurityInfoW( - wn, - SE_FILE_OBJECT, - DACL_SECURITY_INFORMATION, - NULL, - NULL, - &p->pDacl, - NULL, - &p->pSecurityDescriptor); - } - if (p->pSecurityDescriptor == NULL) - { - mch_free_acl((vim_acl_T)p); - p = NULL; - } - vim_free(wn); + mch_free_acl((vim_acl_T)p); + p = NULL; } - else + vim_free(wn); + } + else # endif + { + /* Try to retrieve the entire security descriptor. */ + err = GetNamedSecurityInfo( + (LPSTR)fname, // Abstract filename + SE_FILE_OBJECT, // File Object + OWNER_SECURITY_INFORMATION | + GROUP_SECURITY_INFORMATION | + DACL_SECURITY_INFORMATION | + SACL_SECURITY_INFORMATION, + &p->pSidOwner, // Ownership information. + &p->pSidGroup, // Group membership. + &p->pDacl, // Discretionary information. + &p->pSacl, // For auditing purposes. + &p->pSecurityDescriptor); + if (err == ERROR_ACCESS_DENIED || + err == ERROR_PRIVILEGE_NOT_HELD) { - /* Try to retrieve the entire security descriptor. */ - err = pGetNamedSecurityInfo( - (LPSTR)fname, // Abstract filename - SE_FILE_OBJECT, // File Object - OWNER_SECURITY_INFORMATION | - GROUP_SECURITY_INFORMATION | - DACL_SECURITY_INFORMATION | - SACL_SECURITY_INFORMATION, - &p->pSidOwner, // Ownership information. - &p->pSidGroup, // Group membership. - &p->pDacl, // Discretionary information. - &p->pSacl, // For auditing purposes. - &p->pSecurityDescriptor); - if (err == ERROR_ACCESS_DENIED || - err == ERROR_PRIVILEGE_NOT_HELD) - { - /* Retrieve only DACL. */ - (void)pGetNamedSecurityInfo( - (LPSTR)fname, - SE_FILE_OBJECT, - DACL_SECURITY_INFORMATION, - NULL, - NULL, - &p->pDacl, - NULL, - &p->pSecurityDescriptor); - } - if (p->pSecurityDescriptor == NULL) - { - mch_free_acl((vim_acl_T)p); - p = NULL; - } + /* Retrieve only DACL. */ + (void)GetNamedSecurityInfo( + (LPSTR)fname, + SE_FILE_OBJECT, + DACL_SECURITY_INFORMATION, + NULL, + NULL, + &p->pDacl, + NULL, + &p->pSecurityDescriptor); + } + if (p->pSecurityDescriptor == NULL) + { + mch_free_acl((vim_acl_T)p); + p = NULL; } } } @@ -3733,7 +3491,7 @@ mch_set_acl(char_u *fname, vim_acl_T acl struct my_acl *p = (struct my_acl *)acl; SECURITY_INFORMATION sec_info = 0; - if (p != NULL && advapi_lib != NULL) + if (p != NULL) { # ifdef FEAT_MBYTE WCHAR *wn = NULL; @@ -3761,7 +3519,7 @@ mch_set_acl(char_u *fname, vim_acl_T acl wn = enc_to_utf16(fname, NULL); if (wn != NULL) { - (void)pSetNamedSecurityInfoW( + (void)SetNamedSecurityInfoW( wn, // Abstract filename SE_FILE_OBJECT, // File Object sec_info, @@ -3775,7 +3533,7 @@ mch_set_acl(char_u *fname, vim_acl_T acl else # endif { - (void)pSetNamedSecurityInfo( + (void)SetNamedSecurityInfo( (LPSTR)fname, // Abstract filename SE_FILE_OBJECT, // File Object sec_info, @@ -4076,7 +3834,7 @@ vim_create_process( STARTUPINFO *si, PROCESS_INFORMATION *pi) { -# ifdef FEAT_MBYTE +#ifdef FEAT_MBYTE if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) { WCHAR *wcmd = enc_to_utf16((char_u *)cmd, NULL); @@ -4138,31 +3896,21 @@ mch_system_classic(char *cmd, int option si.lpTitle = NULL; si.dwFlags = STARTF_USESHOWWINDOW; /* - * It's nicer to run a filter command in a minimized window, but in - * Windows 95 this makes the command MUCH slower. We can't do it under - * Win32s either as it stops the synchronous spawn workaround working. + * It's nicer to run a filter command in a minimized window. * Don't activate the window to keep focus on Vim. */ - if ((options & SHELL_DOOUT) && !mch_windows95()) + if (options & SHELL_DOOUT) si.wShowWindow = SW_SHOWMINNOACTIVE; else si.wShowWindow = SW_SHOWNORMAL; si.cbReserved2 = 0; si.lpReserved2 = NULL; - /* There is a strange error on Windows 95 when using "c:\command.com". - * When the "c:\\" is left out it works OK...? */ - if (mch_windows95() - && (STRNICMP(cmd, "c:/command.com", 14) == 0 - || STRNICMP(cmd, "c:\\command.com", 14) == 0)) - cmd += 3; - /* Now, run the command */ vim_create_process(cmd, FALSE, CREATE_DEFAULT_ERROR_MODE | CREATE_NEW_CONSOLE, &si, &pi); /* Wait for the command to terminate before continuing */ - if (g_PlatformId != VER_PLATFORM_WIN32s) { #ifdef FEAT_GUI int delay = 1; @@ -4195,23 +3943,6 @@ mch_system_classic(char *cmd, int option /* Get the command exit code */ GetExitCodeProcess(pi.hProcess, &ret); } - else - { - /* - * This ugly code is the only quick way of performing - * a synchronous spawn under Win32s. Yuk. - */ - num_windows = 0; - EnumWindows(win32ssynch_cb, 0); - old_num_windows = num_windows; - do - { - Sleep(1000); - num_windows = 0; - EnumWindows(win32ssynch_cb, 0); - } while (num_windows == old_num_windows); - ret = 0; - } /* Close the handles to the subprocess, so that it goes away */ CloseHandle(pi.hThread); @@ -4453,11 +4184,11 @@ mch_system_piped(char *cmd, int options) if ( ! CreatePipe(&g_hChildStd_OUT_Rd, &g_hChildStd_OUT_Wr, &saAttr, 0) /* Ensure the read handle to the pipe for STDOUT is not inherited. */ - || ! pSetHandleInformation(g_hChildStd_OUT_Rd, HANDLE_FLAG_INHERIT, 0) + || ! SetHandleInformation(g_hChildStd_OUT_Rd, HANDLE_FLAG_INHERIT, 0) /* Create a pipe for the child process's STDIN. */ || ! CreatePipe(&g_hChildStd_IN_Rd, &g_hChildStd_IN_Wr, &saAttr, 0) /* Ensure the write handle to the pipe for STDIN is not inherited. */ - || ! pSetHandleInformation(g_hChildStd_IN_Wr, HANDLE_FLAG_INHERIT, 0) ) + || ! SetHandleInformation(g_hChildStd_IN_Wr, HANDLE_FLAG_INHERIT, 0) ) { CloseHandle(g_hChildStd_IN_Rd); CloseHandle(g_hChildStd_IN_Wr); @@ -4707,7 +4438,7 @@ mch_system_piped(char *cmd, int options) mch_system(char *cmd, int options) { /* if we can pipe and the shelltemp option is off */ - if (allowPiping && !p_stmp) + if (!p_stmp) return mch_system_piped(cmd, options); else return mch_system_classic(cmd, options); @@ -4960,7 +4691,7 @@ mch_call_shell( { cmdlen = ( #ifdef FEAT_GUI_W32 - (allowPiping && !p_stmp ? 0 : STRLEN(vimrun_path)) + + (!p_stmp ? 0 : STRLEN(vimrun_path)) + #endif STRLEN(p_sh) + STRLEN(p_shcf) + STRLEN(cmd) + 10); @@ -4978,7 +4709,7 @@ mch_call_shell( MB_ICONWARNING); need_vimrun_warning = FALSE; } - if (!s_dont_use_vimrun && (!allowPiping || p_stmp)) + if (!s_dont_use_vimrun && p_stmp) /* Use vimrun to execute the command. It opens a console * window, which can be closed without killing Vim. */ vim_snprintf((char *)newcmd, cmdlen, "%s%s%s %s %s", @@ -5002,8 +4733,7 @@ mch_call_shell( /* Print the return value, unless "vimrun" was used. */ if (x != 0 && !(options & SHELL_SILENT) && !emsg_silent #if defined(FEAT_GUI_W32) - && ((options & SHELL_DOOUT) || s_dont_use_vimrun - || (allowPiping && !p_stmp)) + && ((options & SHELL_DOOUT) || s_dont_use_vimrun || !p_stmp) #endif ) { @@ -5051,14 +4781,10 @@ job_io_file_open( lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, NULL); vim_free(wn); - if (h == INVALID_HANDLE_VALUE - && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - wn = NULL; } } if (wn == NULL) # endif - h = CreateFile((LPCSTR)fname, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, NULL); @@ -5127,7 +4853,7 @@ mch_start_job(char *cmd, job_T *job, job } else if (!use_null_for_in && (!CreatePipe(&ifd[0], &ifd[1], &saAttr, 0) - || !pSetHandleInformation(ifd[1], HANDLE_FLAG_INHERIT, 0))) + || !SetHandleInformation(ifd[1], HANDLE_FLAG_INHERIT, 0))) goto failed; if (use_file_for_out) @@ -5145,7 +4871,7 @@ mch_start_job(char *cmd, job_T *job, job } else if (!use_null_for_out && (!CreatePipe(&ofd[0], &ofd[1], &saAttr, 0) - || !pSetHandleInformation(ofd[0], HANDLE_FLAG_INHERIT, 0))) + || !SetHandleInformation(ofd[0], HANDLE_FLAG_INHERIT, 0))) goto failed; if (use_file_for_err) @@ -5163,7 +4889,7 @@ mch_start_job(char *cmd, job_T *job, job } else if (!use_out_for_err && !use_null_for_err && (!CreatePipe(&efd[0], &efd[1], &saAttr, 0) - || !pSetHandleInformation(efd[0], HANDLE_FLAG_INHERIT, 0))) + || !SetHandleInformation(efd[0], HANDLE_FLAG_INHERIT, 0))) goto failed; si.dwFlags |= STARTF_USESTDHANDLES; @@ -6176,9 +5902,7 @@ mch_remove(char_u *name) { n = DeleteFileW(wn) ? 0 : -1; vim_free(wn); - if (n == 0 || GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) - return n; - /* Retry with non-wide function (for Windows 98). */ + return n; } } #endif @@ -6203,7 +5927,6 @@ mch_breakcheck(int force) /* physical RAM to leave for the OS */ #define WINNT_RESERVE_BYTES (256*1024*1024) -#define WIN95_RESERVE_BYTES (8*1024*1024) /* * How much main memory in KiB that can be used by VIM. @@ -6212,54 +5935,25 @@ mch_breakcheck(int force) long_u mch_total_mem(int special) { + MEMORYSTATUSEX ms; + PlatformId(); -#if (defined(_MSC_VER) && (WINVER > 0x0400)) || defined(MEMORYSTATUSEX) - if (g_PlatformId == VER_PLATFORM_WIN32_NT) + /* Need to use GlobalMemoryStatusEx() when there is more memory than + * what fits in 32 bits. But it's not always available. */ + ms.dwLength = sizeof(MEMORYSTATUSEX); + GlobalMemoryStatusEx(&ms); + if (ms.ullAvailVirtual < ms.ullTotalPhys) { - MEMORYSTATUSEX ms; - - /* Need to use GlobalMemoryStatusEx() when there is more memory than - * what fits in 32 bits. But it's not always available. */ - ms.dwLength = sizeof(MEMORYSTATUSEX); - GlobalMemoryStatusEx(&ms); - if (ms.ullAvailVirtual < ms.ullTotalPhys) - { - /* Process address space fits in physical RAM, use all of it. */ - return (long_u)(ms.ullAvailVirtual / 1024); - } - if (ms.ullTotalPhys <= WINNT_RESERVE_BYTES) - { - /* Catch old NT box or perverse hardware setup. */ - return (long_u)((ms.ullTotalPhys / 2) / 1024); - } - /* Use physical RAM less reserve for OS + data. */ - return (long_u)((ms.ullTotalPhys - WINNT_RESERVE_BYTES) / 1024); + /* Process address space fits in physical RAM, use all of it. */ + return (long_u)(ms.ullAvailVirtual / 1024); } - else -#endif + if (ms.ullTotalPhys <= WINNT_RESERVE_BYTES) { - /* Pre-XP or 95 OS handling. */ - MEMORYSTATUS ms; - long_u os_reserve_bytes; - - ms.dwLength = sizeof(MEMORYSTATUS); - GlobalMemoryStatus(&ms); - if (ms.dwAvailVirtual < ms.dwTotalPhys) - { - /* Process address space fits in physical RAM, use all of it. */ - return (long_u)(ms.dwAvailVirtual / 1024); - } - os_reserve_bytes = (g_PlatformId == VER_PLATFORM_WIN32_NT) - ? WINNT_RESERVE_BYTES - : WIN95_RESERVE_BYTES; - if (ms.dwTotalPhys <= os_reserve_bytes) - { - /* Catch old boxes or perverse hardware setup. */ - return (long_u)((ms.dwTotalPhys / 2) / 1024); - } - /* Use physical RAM less reserve for OS + data. */ - return (long_u)((ms.dwTotalPhys - os_reserve_bytes) / 1024); + /* Catch old NT box or perverse hardware setup. */ + return (long_u)((ms.ullTotalPhys / 2) / 1024); } + /* Use physical RAM less reserve for OS + data. */ + return (long_u)((ms.ullTotalPhys - WINNT_RESERVE_BYTES) / 1024); } #ifdef FEAT_MBYTE @@ -6276,16 +5970,13 @@ mch_wrename(WCHAR *wold, WCHAR *wnew) WCHAR szNewPath[_MAX_PATH + 1]; HANDLE hf; - if (!mch_windows95()) - { - p = wold; - for (i = 0; wold[i] != NUL; ++i) - if ((wold[i] == '/' || wold[i] == '\\' || wold[i] == ':') - && wold[i + 1] != 0) - p = wold + i + 1; - if ((int)(wold + i - p) < 8 || p[6] != '~') - return (MoveFileW(wold, wnew) == 0); - } + p = wold; + for (i = 0; wold[i] != NUL; ++i) + if ((wold[i] == '/' || wold[i] == '\\' || wold[i] == ':') + && wold[i + 1] != 0) + p = wold + i + 1; + if ((int)(wold + i - p) < 8 || p[6] != '~') + return (MoveFileW(wold, wnew) == 0); if (GetFullPathNameW(wnew, _MAX_PATH, szNewPath, &p) == 0 || p == NULL) return -1; @@ -6363,22 +6054,17 @@ mch_rename( retval = mch_wrename(wold, wnew); vim_free(wold); vim_free(wnew); - if (retval == 0 || GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) - return retval; - /* Retry with non-wide function (for Windows 98). */ + return retval; } #endif /* - * No need to play tricks if not running Windows 95, unless the file name - * contains a "~" as the seventh character. + * No need to play tricks unless the file name contains a "~" as the + * seventh character. */ - if (!mch_windows95()) - { - pszFilePart = (char *)gettail((char_u *)pszOldFile); - if (STRLEN(pszFilePart) < 8 || pszFilePart[6] != '~') - return rename(pszOldFile, pszNewFile); - } + pszFilePart = (char *)gettail((char_u *)pszOldFile); + if (STRLEN(pszFilePart) < 8 || pszFilePart[6] != '~') + return rename(pszOldFile, pszNewFile); /* Get base path of new file name. Undocumented feature: If pszNewFile is * a directory, no error is returned and pszFilePart will be NULL. */ @@ -6441,16 +6127,9 @@ mch_rename( char * default_shell(void) { - char* psz = NULL; - PlatformId(); - if (g_PlatformId == VER_PLATFORM_WIN32_NT) /* Windows NT */ - psz = "cmd.exe"; - else if (g_PlatformId == VER_PLATFORM_WIN32_WINDOWS) /* Windows 95 */ - psz = "command.com"; - - return psz; + return "cmd.exe"; } /* @@ -6496,18 +6175,11 @@ mch_access(char *n, int p) hFile = FindFirstFileW(TempNameW, &d); if (hFile == INVALID_HANDLE_VALUE) - { - if (GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) - goto getout; - - /* Retry with non-wide function (for Windows 98). */ - vim_free(wn); - wn = NULL; - } + goto getout; else (void)FindClose(hFile); } - if (wn == NULL) + else #endif { char *pch; @@ -6537,18 +6209,11 @@ mch_access(char *n, int p) if (wn != NULL) { if (!GetTempFileNameW(wn, L"VIM", 0, TempNameW)) - { - if (GetLastError() != ERROR_CALL_NOT_IMPLEMENTED) - goto getout; - - /* Retry with non-wide function (for Windows 98). */ - vim_free(wn); - wn = NULL; - } + goto getout; else DeleteFileW(TempNameW); } - if (wn == NULL) + else #endif { if (!GetTempFileName(n, "VIM", 0, TempName)) @@ -6565,17 +6230,8 @@ mch_access(char *n, int p) | ((p & R_OK) ? GENERIC_READ : 0); #ifdef FEAT_MBYTE if (wn != NULL) - { hFile = CreateFileW(wn, am, 0, NULL, OPEN_EXISTING, 0, NULL); - if (hFile == INVALID_HANDLE_VALUE - && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) - { - /* Retry with non-wide function (for Windows 98). */ - vim_free(wn); - wn = NULL; - } - } - if (wn == NULL) + else #endif hFile = CreateFile(n, am, 0, NULL, OPEN_EXISTING, 0, NULL); if (hFile == INVALID_HANDLE_VALUE) @@ -6610,11 +6266,7 @@ mch_open(char *name, int flags, int mode { f = _wopen(wn, flags, mode); vim_free(wn); - if (f >= 0 || g_PlatformId == VER_PLATFORM_WIN32_NT) - return f; - /* Retry with non-wide function (for Windows 98). Can't use - * GetLastError() here and it's unclear what errno gets set to if - * the _wopen() fails for missing wide functions. */ + return f; } } # endif @@ -6638,12 +6290,7 @@ mch_fopen(char *name, char *mode) WCHAR *wn, *wm; FILE *f = NULL; - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage -# ifdef __BORLANDC__ - /* Wide functions of Borland C 5.5 do not work on Windows 98. */ - && g_PlatformId == VER_PLATFORM_WIN32_NT -# endif - ) + if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) { # if defined(DEBUG) && _MSC_VER >= 1400 /* Work around an annoying assertion in the Microsoft debug CRT @@ -6667,12 +6314,7 @@ mch_fopen(char *name, char *mode) # if defined(DEBUG) && _MSC_VER >= 1400 _set_fmode(oldMode); # endif - - if (f != NULL || g_PlatformId == VER_PLATFORM_WIN32_NT) - return f; - /* Retry with non-wide function (for Windows 98). Can't use - * GetLastError() here and it's unclear what errno gets set to if - * the _wfopen() fails for missing wide functions. */ + return f; } /* fopen() can open a file which name is longer than _MAX_PATH bytes @@ -6843,8 +6485,7 @@ mch_copy_file_attribute(char_u *from, ch #ifdef FEAT_MBYTE /* File streams only work on Windows NT and later. */ PlatformId(); - if (g_PlatformId == VER_PLATFORM_WIN32_NT) - copy_infostreams(from, to); + copy_infostreams(from, to); #endif return 0; } @@ -6856,7 +6497,6 @@ mch_copy_file_attribute(char_u *from, ch */ /* These magic numbers are from the MS header files */ -#define MIN_STACK_WIN9X 17 #define MIN_STACK_WINNT 2 /* @@ -6876,10 +6516,7 @@ myresetstkoflw(void) DWORD nPageSize; DWORD dummy; - /* This code will not work on win32s. */ PlatformId(); - if (g_PlatformId == VER_PLATFORM_WIN32s) - return 0; /* We need to know the system page size. */ GetSystemInfo(&si); @@ -6895,29 +6532,12 @@ myresetstkoflw(void) /* ...and the page thats min_stack_req pages away from stack base; this is * the lowest page we could use. */ - pLowestPossiblePage = pStackBase + ((g_PlatformId == VER_PLATFORM_WIN32_NT) - ? MIN_STACK_WINNT : MIN_STACK_WIN9X) * nPageSize; - - /* On Win95, we want the next page down from the end of the stack. */ - if (g_PlatformId == VER_PLATFORM_WIN32_WINDOWS) + pLowestPossiblePage = pStackBase + MIN_STACK_WINNT * nPageSize; + { - /* Find the page that's only 1 page down from the page that the stack - * ptr is in. */ - pGuardPage = (BYTE*)((DWORD)nPageSize * (((DWORD)pStackPtr - / (DWORD)nPageSize) - 1)); - if (pGuardPage < pLowestPossiblePage) - return 0; - - /* Apply the noaccess attribute to the page -- there's no guard - * attribute in win95-type OSes. */ - if (!VirtualProtect(pGuardPage, nPageSize, PAGE_NOACCESS, &dummy)) - return 0; - } - else - { - /* On NT, however, we want the first committed page in the stack Start - * at the stack base and move forward through memory until we find a - * committed block. */ + /* We want the first committed page in the stack Start at the stack + * base and move forward through memory until we find a committed block. + */ BYTE *pBlock = pStackBase; for (;;) diff --git a/src/os_win32.h b/src/os_win32.h --- a/src/os_win32.h +++ b/src/os_win32.h @@ -210,20 +210,15 @@ Trace(char *pszFormat, ...); # define vim_mkdir(x, y) mch_mkdir(x) #endif -#ifndef PROTO - /* Enable common dialogs input unicode from IME if possible. */ #ifdef FEAT_MBYTE - /* The variables are defined in os_win32.c. */ -extern LRESULT (WINAPI *pDispatchMessage)(CONST MSG *); -extern BOOL (WINAPI *pGetMessage)(LPMSG, HWND, UINT, UINT); -extern BOOL (WINAPI *pIsDialogMessage)(HWND, LPMSG); -extern BOOL (WINAPI *pPeekMessage)(LPMSG, HWND, UINT, UINT, UINT); +# define pDispatchMessage DispatchMessageW +# define pGetMessage GetMessageW +# define pIsDialogMessage IsDialogMessageW +# define pPeekMessage PeekMessageW #else # define pDispatchMessage DispatchMessage # define pGetMessage GetMessage # define pIsDialogMessage IsDialogMessage # define pPeekMessage PeekMessage #endif - -#endif /* PROTO */ diff --git a/src/proto/os_mswin.pro b/src/proto/os_mswin.pro --- a/src/proto/os_mswin.pro +++ b/src/proto/os_mswin.pro @@ -19,7 +19,6 @@ void display_errors(void); int mch_has_exp_wildcard(char_u *p); int mch_has_wildcard(char_u *p); int mch_chdir(char *path); -int can_end_termcap_mode(int give_msg); int mch_screenmode(char_u *arg); int mch_icon_load(HANDLE *iconp); int mch_libcall(char_u *libname, char_u *funcname, char_u *argstring, int argint, char_u **string_result, int *number_result); diff --git a/src/proto/os_win32.pro b/src/proto/os_win32.pro --- a/src/proto/os_win32.pro +++ b/src/proto/os_win32.pro @@ -3,7 +3,6 @@ HINSTANCE vimLoadLib(char *name); int dyn_libintl_init(void); void dyn_libintl_end(void); void PlatformId(void); -int mch_windows95(void); void mch_setmouse(int on); void mch_update_cursor(void); int mch_char_avail(void); diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -765,6 +765,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 29, +/**/ 28, /**/ 27, @@ -962,15 +964,10 @@ list_version(void) MSG(longVersion); #ifdef WIN3264 # ifdef FEAT_GUI_W32 -# if defined(_MSC_VER) && (_MSC_VER <= 1010) - /* Only MS VC 4.1 and earlier can do Win32s */ - MSG_PUTS(_("\nMS-Windows 16/32-bit GUI version")); +# ifdef _WIN64 + MSG_PUTS(_("\nMS-Windows 64-bit GUI version")); # else -# ifdef _WIN64 - MSG_PUTS(_("\nMS-Windows 64-bit GUI version")); -# else MSG_PUTS(_("\nMS-Windows 32-bit GUI version")); -# endif # endif # ifdef FEAT_OLE MSG_PUTS(_(" with OLE support")); @@ -1332,10 +1329,6 @@ intro_message( blanklines = (int)Rows - ((sizeof(lines) / sizeof(char *)) - 1); if (!p_cp) blanklines += 4; /* add 4 for not showing "Vi compatible" message */ -#if defined(WIN3264) && !defined(FEAT_GUI_W32) - if (mch_windows95()) - blanklines -= 3; /* subtract 3 for showing "Windows 95" message */ -#endif #ifdef FEAT_WINDOWS /* Don't overwrite a statusline. Depends on 'cmdheight'. */ @@ -1384,17 +1377,6 @@ intro_message( do_intro_line(row, (char_u *)_(p), i == 2, 0); ++row; } -#if defined(WIN3264) && !defined(FEAT_GUI_W32) - if (mch_windows95()) - { - do_intro_line(++row, - (char_u *)_("WARNING: Windows 95/98/ME detected"), - FALSE, hl_attr(HLF_E)); - do_intro_line(++row, - (char_u *)_("type :help windows95 for info on this"), - FALSE, 0); - } -#endif } /* Make the wait-return message appear just below the text. */