diff --git a/src/GvimExt/Make_bc5.mak b/src/GvimExt/Make_bc5.mak
deleted file mode 100644
index 363c6d6..0000000
--- a/src/GvimExt/Make_bc5.mak
+++ /dev/null
@@ -1,43 +0,0 @@
-### USEDLL  no for statically linked version of run-time, yes for DLL runtime
-### BOR	    path to root of Borland C install (c:\bc5)
-
-### (requires cc3250.dll be available in %PATH%)
-!if ("$(USEDLL)"=="")
-USEDLL = no
-!endif
-
-### BOR: root of the BC installation
-!if ("$(BOR)"=="")
-BOR = c:\bc5
-!endif
-
-CC	= $(BOR)\bin\Bcc32
-BRC	= $(BOR)\bin\brc32
-LINK	= $(BOR)\BIN\ILink32
-INCLUDE = $(BOR)\include;.
-LIB	= $(BOR)\lib
-
-!if ("$(USEDLL)"=="yes")
-RT_DEF = -D_RTLDLL
-RT_LIB = cw32i.lib
-!else
-RT_DEF =
-RT_LIB = cw32.lib
-!endif
-
-
-all : gvimext.dll
-
-gvimext.obj : gvimext.cpp gvimext.h
-	$(CC) -tWD -I$(INCLUDE) -c -DFEAT_GETTEXT $(RT_DEF) -w- gvimext.cpp
-
-gvimext.res : gvimext.rc
-	$(BRC) -r gvimext.rc
-
-gvimext.dll : gvimext.obj gvimext.res
-	$(LINK) -L$(LIB) -aa gvimext.obj, gvimext.dll, , c0d32.obj $(RT_LIB) import32.lib, gvimext.def, gvimext.res
-
-clean :
-	-@del gvimext.obj
-	-@del gvimext.res
-	-@del gvimext.dll
diff --git a/src/GvimExt/gvimext.cpp b/src/GvimExt/gvimext.cpp
index b9d9d91..53d96df 100644
--- a/src/GvimExt/gvimext.cpp
+++ b/src/GvimExt/gvimext.cpp
@@ -16,14 +16,7 @@
 
 #include "gvimext.h"
 
-#ifdef __BORLANDC__
-# include <dir.h>
-# ifndef _strnicmp
-#  define _strnicmp(a, b, c) strnicmp((a), (b), (c))
-# endif
-#else
 static char *searchpath(char *name);
-#endif
 
 // Always get an error while putting the following stuff to the
 // gvimext.h file as class protected variables, give up and
@@ -917,7 +910,6 @@
 	return TRUE;
 }
 
-#ifndef __BORLANDC__
     static char *
 searchpath(char *name)
 {
@@ -937,7 +929,6 @@
     }
     return (char *)"";
 }
-#endif
 
 STDMETHODIMP CShellExt::InvokeGvim(HWND hParent,
 				   LPCSTR  /* pszWorkingDir */,
diff --git a/src/GvimExt/gvimext.rc b/src/GvimExt/gvimext.rc
index 22102db..10476da 100644
--- a/src/GvimExt/gvimext.rc
+++ b/src/GvimExt/gvimext.rc
@@ -7,9 +7,7 @@
 //
 // Generated from the TEXTINCLUDE 2 resource.
 //
-#ifndef __BORLANDC__
-# include "winresrc.h"
-#endif
+#include "winresrc.h"
 
 /////////////////////////////////////////////////////////////////////////////
 #undef APSTUDIO_READONLY_SYMBOLS
diff --git a/src/INSTALLpc.txt b/src/INSTALLpc.txt
index 0c276fa..c72875a 100644
--- a/src/INSTALLpc.txt
+++ b/src/INSTALLpc.txt
@@ -25,21 +25,20 @@
 2. Using MSYS2 with MinGW
 3. Using MinGW
 4. Cygwin
-5. Borland
-6. Cross compiling for Win32 from a Linux machine
-7. Building with Python support
-8. Building with Python3 support
-9. Building with Racket or MzScheme support
-10. Building with Lua support
-11. Building with Perl support
-12. Building with Ruby support
-13. Building with Tcl support
-14. Building with Terminal support
-15. Building with DirectX (DirectWrite) support
-16. Windows 3.1
-17. MS-DOS
+5. Cross compiling for Win32 from a Linux machine
+6. Building with Python support
+7. Building with Python3 support
+8. Building with Racket or MzScheme support
+9. Building with Lua support
+10. Building with Perl support
+11. Building with Ruby support
+12. Building with Tcl support
+13. Building with Terminal support
+14. Building with DirectX (DirectWrite) support
+15. Windows 3.1
+16. MS-DOS
 
-18. Installing after building from sources
+17. Installing after building from sources
 
 
 The currently recommended way (that means it has been verified to work) is
@@ -451,14 +450,7 @@
 with the other makefiles).
 
 
-5. Borland
-===========
-
-Use Make_bc5.mak with Borland C++ 5.x. See
-    http://users.skynet.be/antoine.mechelynck/vim/compile.htm
-
-
-6. Cross compiling for Win32 from a Linux machine
+5. Cross compiling for Win32 from a Linux machine
 =================================================
 
 [Update of 1) needs to be verified]
@@ -478,7 +470,7 @@
 Now you have created the Windows binary from your Linux box!  Have fun...
 
 
-7. Building with Python support
+6. Building with Python support
 ===============================
 
 For building with MSVC 2008 the "Windows Installer" from www.python.org
@@ -539,7 +531,7 @@
 You will end up with a Python-enabled, Win32 version. Enjoy!
 
 
-8. Building with Python3 support
+7. Building with Python3 support
 ================================
 
 For building with MSVC 2008 the "Windows Installer" from www.python.org
@@ -576,7 +568,7 @@
 libstdc++-6.dll.)
 
 
-9. Building with Racket or MzScheme support
+8. Building with Racket or MzScheme support
 ========================================
 
 1) Building with Racket support (newest)
@@ -666,7 +658,7 @@
 
 
 
-10. Building with Lua support
+9. Building with Lua support
 ============================
 
 Vim with Lua support can be built with either MSVC or MinGW (or maybe Cygwin).
@@ -721,7 +713,7 @@
         LUA=/cygdrive/c/projects/lua53 DYNAMIC_LUA=yes LUA_VER=53
 
 
-11. Building with Perl support
+10. Building with Perl support
 ==============================
 
 Vim with Perl support can be built with either MSVC or MinGW (or Cygwin).
@@ -747,7 +739,7 @@
         PERL=C:/Perl DYNAMIC_PERL=yes PERL_VER=522
 
 
-12. Building with Ruby support
+11. Building with Ruby support
 ==============================
 
 Vim with Ruby support can be built with either MSVC or MinGW (or Cygwin).
@@ -855,7 +847,7 @@
 
 
 
-13. Building with Tcl support
+12. Building with Tcl support
 =============================
 
 Vim with Tcl support can be built with either MSVC or MinGW (or Cygwin).
@@ -894,7 +886,7 @@
         TCL=C:/Tcl86 DYNAMIC_TCL=yes TCL_VER=86 TCL_VER_LONG=8.6
 
 
-14. Building with Terminal support
+13. Building with Terminal support
 ==================================
 
 Vim with Terminal support can be built with either MSVC, MinGW or Cygwin.
@@ -910,7 +902,7 @@
     mingw32-make -f Make_ming.mak TERMINAL=yes
 
 
-15. Building with DirectX (DirectWrite) support
+14. Building with DirectX (DirectWrite) support
 ===============================================
 
 Vim with DirectX (DirectWrite) support can be built with either MSVC or MinGW.
@@ -944,20 +936,20 @@
     mingw32-make -f Make_ming.mak DIRECTX=yes
 
 
-16. Windows 3.1x
+15. Windows 3.1x
 ================
 
 The Windows 3.1x support was removed in patch 7.4.1364.
 
 
-17. MS-DOS
+16. MS-DOS
 ==========
 
 The MS-DOS support was removed in patch 7.4.1399.  Only very old Vim versions
 work on MS-DOS because of the limited amount of memory available.
 
 
-18. Installing after building from sources
+17. Installing after building from sources
 ==========================================
 
 [provided by Michael Soyka, updated by Ken Takata]
diff --git a/src/Make_bc5.mak b/src/Make_bc5.mak
deleted file mode 100644
index a6b4bc9..0000000
--- a/src/Make_bc5.mak
+++ /dev/null
@@ -1,983 +0,0 @@
-#
-# Makefile for Vim.
-# Compiler: Borland C++ 5.0 and later 32-bit compiler
-#  Targets: Win32 (Windows NT and Windows 95) (with/without GUI)
-#
-# NOTE: THIS IS OLD AND PROBABLY NO LONGER WORKS.
-#
-# Contributed by Ben Singer.
-# Updated 4/1997 by Ron Aaron
-#	2016: removed support for 16 bit DOS
-#	6/1997 - added support for 16 bit DOS
-#	Note: this has been tested, and works, for BC5.  Your mileage may vary.
-#	Has been reported NOT to work with BC 4.52.  Maybe it can be fixed?
-#	10/1997 - ron - fixed bugs w/ BC 5.02
-#	8/1998 - ron - updated with new targets, fixed some stuff
-#	3/2000 - Bram: Made it work with BC 5.5 free command line compiler,
-#			cleaned up variables.
-#	6/2001 - Dan - Added support for compiling Python and TCL
-#	7/2001 - Dan - Added support for compiling Ruby
-#
-# It builds on Windows 95 and NT-Intel, producing the same binary in either
-# case.  To build using Microsoft Visual C++, use Make_mvc.mak.
-#
-# This should work with the free Borland command line compiler, version 5.5.
-# You need at least sp1 (service pack 1).  With sp2 it compiles faster.
-# Use a command like this:
-# <path>\bin\make /f Make_bc5.mak BOR=<path>
-#
-
-# let the make utility do the hard work:
-.AUTODEPEND
-.CACHEAUTODEPEND
-
-# VARIABLES:
-# name		value (default)
-#
-# BOR		path to root of Borland C install (c:\bc5)
-# LINK		name of the linker ($(BOR)\bin\ilink32)
-# GUI		no or yes: set to yes if you want the GUI version (yes)
-# LUA     define to path to Lua dir to get Lua support (not defined)
-#   LUA_VER	  define to version of Lua being used (51)
-#   DYNAMIC_LUA  no or yes: set to yes to load the Lua DLL dynamically (no)
-# PERL		define to path to Perl dir to get Perl support (not defined)
-#   PERL_VER	  define to version of Perl being used (56)
-#   DYNAMIC_PERL  no or yes: set to yes to load the Perl DLL dynamically (no)
-# PYTHON	define to path to Python dir to get PYTHON support (not defined)
-#   PYTHON_VER	    define to version of Python being used (22)
-#   DYNAMIC_PYTHON  no or yes: use yes to load the Python DLL dynamically (no)
-# PYTHON3	define to path to Python3 dir to get PYTHON3 support (not defined)
-#   PYTHON3_VER	    define to version of Python3 being used (31)
-#   DYNAMIC_PYTHON3  no or yes: use yes to load the Python3 DLL dynamically (no)
-# TCL		define to path to TCL dir to get TCL support (not defined)
-#   TCL_VER	define to version of TCL being used (83)
-#   DYNAMIC_TCL no or yes: use yes to load the TCL DLL dynamically (no)
-# RUBY		define to path to Ruby dir to get Ruby support (not defined)
-#		NOTE: You may have to remove the defines for uid_t and gid_t
-#		from the Ruby config.h header file.
-#   RUBY_VER	define to version of Ruby being used (16)
-#		NOTE: compilation on WinNT/2K/XP requires
-#		at least version 1.6.5 of Ruby.  Earlier versions
-#		of Ruby will cause a compile error on these systems.
-#   RUBY_VER_LONG  same, but in format with dot. (1.6)
-#   DYNAMIC_RUBY no or yes: use yes to load the Ruby DLL dynamically (no)
-# IME		no or yes: set to yes for multi-byte IME support (yes)
-#   DYNAMIC_IME no or yes: set to yes to load imm32.dll dynamically (yes)
-# GETTEXT	no or yes: set to yes for multi-language support (yes)
-# ICONV		no or yes: set to yes for dynamic iconv support (yes)
-# OLE		no or yes: set to yes to make OLE gvim (no)
-# DEBUG		no or yes: set to yes if you wish a DEBUGging build (no)
-# CODEGUARD	no or yes: set to yes if you want to use CODEGUARD (no)
-# CPUNR		1 through 6: select -CPU argument to compile with (3)
-#		3 for 386, 4 for 486, 5 for pentium, 6 for pentium pro.
-# USEDLL	no or yes: set to yes to use the Runtime library DLL (no)
-#		For USEDLL=yes the cc3250.dll is required to run Vim.
-# ALIGN		1, 2 or 4: Alignment to use (4 for Win32)
-# FASTCALL	no or yes: set to yes to use register-based function protocol (yes)
-# OPTIMIZE	SPACE, SPEED, or MAXSPEED: type of optimization (MAXSPEED)
-# POSTSCRIPT	no or yes: set to yes for PostScript printing
-# FEATURES	TINY, SMALL, NORMAL, BIG or HUGE (BIG for WIN32)
-# WINVER	0x0400 or 0x0500: minimum Win32 version to support (0x0400)
-# CSCOPE	no or yes: include support for Cscope interface (yes)
-# NETBEANS	no or yes: include support for Netbeans interface; also
-#		requires CHANNEL (yes if GUI
-#		is yes)
-# NBDEBUG	no or yes: include support for debugging Netbeans interface (no)
-# CHANNEL	no or yes: include support for inter process communication (yes
-#		if GUI is yes)
-# XPM		define to path to XPM dir to get support for loading XPM images.
-
-### BOR: root of the BC installation
-!if ("$(BOR)"=="")
-BOR = c:\bc5
-!endif
-
-### LINK: Name of the linker: ilink32 (this is below)
-
-### GUI: yes for GUI version, no for console version
-!if ("$(GUI)"=="")
-GUI = yes
-!endif
-
-### IME: yes for multibyte support, no to disable it.
-!if ("$(IME)"=="")
-IME = yes
-!endif
-!if ("$(DYNAMIC_IME)"=="")
-DYNAMIC_IME = yes
-!endif
-
-### GETTEXT: yes for multilanguage support, no to disable it.
-!if ("$(GETTEXT)"=="")
-GETTEXT = yes
-!endif
-
-### ICONV: yes to enable dynamic-iconv support, no to disable it
-!if ("$(ICONV)"=="")
-ICONV = yes
-!endif
-
-### CSCOPE: yes to enable Cscope support, no to disable it
-!if ("$(CSCOPE)"=="")
-CSCOPE = yes
-!endif
-
-### NETBEANS: yes to enable NetBeans interface support, no to disable it
-!if ("$(NETBEANS)"=="") && ("$(GUI)"=="yes")
-NETBEANS = yes
-!endif
-
-### CHANNEL: yes to enable inter process communication, no to disable it
-!if ("$(CHANNEL)"=="") && ("$(GUI)"=="yes")
-CHANNEL = yes
-!endif
-
-### LUA: uncomment this line if you want lua support in vim
-# LUA=c:\lua
-
-### PERL: uncomment this line if you want perl support in vim
-# PERL=c:\perl
-
-### PYTHON: uncomment this line if you want python support in vim
-# PYTHON=c:\python22
-
-### PYTHON3: uncomment this line if you want python3 support in vim
-# PYTHON3=c:\python31
-
-### RUBY: uncomment this line if you want ruby support in vim
-# RUBY=c:\ruby
-
-### TCL: uncomment this line if you want tcl support in vim
-# TCL=c:\tcl
-
-### OLE: no for normal gvim, yes for OLE-capable gvim (only works with GUI)
-#OLE = yes
-
-### DEBUG: Uncomment to make an executable for debugging
-# DEBUG = yes
-!if ("$(DEBUG)"=="yes")
-DEBUG_FLAG = -v
-!endif
-
-### CODEGUARD: Uncomment to use the CODEGUARD stuff (BC 5.0 or later):
-# CODEGUARD = yes
-!if ("$(CODEGUARD)"=="yes")
-CODEGUARD_FLAG = -vG
-!endif
-
-### CPUNR: set your target processor (3 to 6)
-!if ("$(CPUNR)" == "i386") || ("$(CPUNR)" == "3")
-CPUNR = 3
-!elif ("$(CPUNR)" == "i486") || ("$(CPUNR)" == "4")
-CPUNR = 4
-!elif ("$(CPUNR)" == "i586") || ("$(CPUNR)" == "5")
-CPUNR = 5
-!elif ("$(CPUNR)" == "i686") || ("$(CPUNR)" == "6")
-CPUNR = 6
-!else
-CPUNR = 3
-!endif
-
-### Comment out to use precompiled headers (faster, but uses lots of disk!)
-HEADERS = -H -H=vim.csm -Hc
-
-### USEDLL: no for statically linked version of run-time, yes for DLL runtime
-!if ("$(USEDLL)"=="")
-USEDLL = no
-!endif
-
-### ALIGN: alignment you desire: (1,2 or 4: s/b 4 for Win32)
-!if ("$(ALIGN)"=="")
-ALIGN = 4
-!endif
-
-### FASTCALL: yes to use FASTCALL calling convention (RECOMMENDED!), no otherwise
-#   Incompatible when calling external functions (like MSVC-compiled DLLs), so
-#   don't use FASTCALL when linking with external libs.
-!if ("$(FASTCALL)"=="") && \
-	("$(LUA)"=="") && \
-	("$(PYTHON)"=="") && \
-	("$(PYTHON3)"=="") && \
-	("$(PERL)"=="") && \
-	("$(TCL)"=="") && \
-	("$(RUBY)"=="") && \
-	("$(ICONV)"!="yes") && \
-	("$(IME)"!="yes") && \
-	("$(XPM)"=="")
-FASTCALL = yes
-!endif
-
-### OPTIMIZE: SPEED to optimize for speed, SPACE otherwise (SPEED RECOMMENDED)
-!if ("$(OPTIMIZE)"=="")
-OPTIMIZE = MAXSPEED
-!endif
-
-### FEATURES: TINY, SMALL, NORMAL, BIG or HUGE (BIG for WIN32)
-!if ("$(FEATURES)"=="")
-FEATURES = BIG
-!endif
-
-### POSTSCRIPT: uncomment this line if you want PostScript printing
-#POSTSCRIPT = yes
-
-###
-# If you have a fixed directory for $VIM or $VIMRUNTIME, other than the normal
-# default, use these lines.
-#VIMRCLOC = somewhere
-#VIMRUNTIMEDIR = somewhere
-
-### Set the default $(WINVER) to make it work with Bcc 5.5.
-!ifndef WINVER
-WINVER = 0x0400
-!endif
-
-#
-# Sanity checks for the above options:
-#
-
-OSTYPE = WIN32
-
-#
-# Optimizations: change as desired (RECOMMENDATION: Don't change!):
-#
-!if ("$(DEBUG)"=="yes")
-OPT = -Od -N
-!else
-!if ("$(OPTIMIZE)"=="SPACE")
-OPT = -O1 -f- -d
-!elif ("$(OPTIMIZE)"=="MAXSPEED")
-OPT = -O2 -f- -d -Ocavi -O
-!else
-OPT = -O2 -f- -d -Oc -O
-!endif
-!if ("$(FASTCALL)"=="yes")
-OPT = $(OPT) -pr
-!endif
-!if ("$(CODEGUARD)"!="yes")
-OPT = $(OPT) -vi-
-!endif
-!endif
-# shouldn't have to change:
-LIB = $(BOR)\lib
-INCLUDE = $(BOR)\include;.;proto
-DEFINES = -DFEAT_$(FEATURES) -DWIN32 -DHAVE_PATHDEF \
-	  -DWINVER=$(WINVER) -D_WIN32_WINNT=$(WINVER)
-
-!ifdef LUA
-INTERP_DEFINES = $(INTERP_DEFINES) -DFEAT_LUA
-INCLUDE = $(LUA)\include;$(INCLUDE)
-!  ifndef LUA_VER
-LUA_VER = 51
-!  endif
-!  if ("$(DYNAMIC_LUA)" == "yes")
-INTERP_DEFINES = $(INTERP_DEFINES) -DDYNAMIC_LUA -DDYNAMIC_LUA_DLL=\"lua$(LUA_VER).dll\"
-LUA_LIB_FLAG = /nodefaultlib:
-!  endif
-!endif
-
-!ifdef PERL
-INTERP_DEFINES = $(INTERP_DEFINES) -DFEAT_PERL
-INCLUDE = $(PERL)\lib\core;$(INCLUDE)
-!  ifndef PERL_VER
-PERL_VER = 56
-!  endif
-!  if ("$(DYNAMIC_PERL)" == "yes")
-!    if ($(PERL_VER) > 55)
-INTERP_DEFINES = $(INTERP_DEFINES) -DDYNAMIC_PERL -DDYNAMIC_PERL_DLL=\"perl$(PERL_VER).dll\"
-PERL_LIB_FLAG = /nodefaultlib:
-!    else
-!      message "Cannot dynamically load Perl versions less than 5.6.  Loading statically..."
-!    endif
-!  endif
-!endif
-
-!ifdef PYTHON
-!ifdef PYTHON3
-DYNAMIC_PYTHON=yes
-DYNAMIC_PYTHON3=yes
-!endif
-!endif
-
-!ifdef PYTHON
-INTERP_DEFINES = $(INTERP_DEFINES) -DFEAT_PYTHON
-!ifndef PYTHON_VER
-PYTHON_VER = 22
-!endif
-!if "$(DYNAMIC_PYTHON)" == "yes"
-INTERP_DEFINES = $(INTERP_DEFINES) -DDYNAMIC_PYTHON -DDYNAMIC_PYTHON_DLL=\"python$(PYTHON_VER).dll\"
-PYTHON_LIB_FLAG = /nodefaultlib:
-!endif
-!endif
-
-!ifdef PYTHON3
-INTERP_DEFINES = $(INTERP_DEFINES) -DFEAT_PYTHON3
-!ifndef PYTHON3_VER
-PYTHON3_VER = 31
-!endif
-!if "$(DYNAMIC_PYTHON3)" == "yes"
-INTERP_DEFINES = $(INTERP_DEFINES) -DDYNAMIC_PYTHON3 -DDYNAMIC_PYTHON3_DLL=\"python$(PYTHON3_VER).dll\"
-PYTHON3_LIB_FLAG = /nodefaultlib:
-!endif
-!endif
-
-
-!ifdef RUBY
-!ifndef RUBY_VER
-RUBY_VER = 16
-!endif
-!ifndef RUBY_VER_LONG
-RUBY_VER_LONG = 1.6
-!endif
-
-!if "$(RUBY_VER)" == "16"
-!ifndef RUBY_PLATFORM
-RUBY_PLATFORM = i586-mswin32
-!endif
-!ifndef RUBY_INSTALL_NAME
-RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_VER)
-!endif
-!else
-!ifndef RUBY_PLATFORM
-RUBY_PLATFORM = i386-mswin32
-!endif
-!ifndef RUBY_INSTALL_NAME
-RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_VER)
-!endif
-!endif
-
-INTERP_DEFINES = $(INTERP_DEFINES) -DFEAT_RUBY
-INCLUDE = $(RUBY)\lib\ruby\$(RUBY_VER_LONG)\$(RUBY_PLATFORM);$(INCLUDE)
-
-!if "$(DYNAMIC_RUBY)" == "yes"
-INTERP_DEFINES = $(INTERP_DEFINES) -DDYNAMIC_RUBY -DDYNAMIC_RUBY_DLL=\"$(RUBY_INSTALL_NAME).dll\"
-INTERP_DEFINES = $(INTERP_DEFINES) -DDYNAMIC_RUBY_VER=$(RUBY_VER)
-RUBY_LIB_FLAG = /nodefaultlib:
-!endif
-!endif
-
-!ifdef TCL
-INTERP_DEFINES = $(INTERP_DEFINES) -DFEAT_TCL
-INCLUDE = $(TCL)\include;$(INCLUDE)
-!ifndef TCL_VER
-TCL_VER = 83
-!endif
-TCL_LIB = $(TCL)\lib\tcl$(TCL_VER).lib
-TCL_LIB_FLAG =
-!if "$(DYNAMIC_TCL)" == "yes"
-INTERP_DEFINES = $(INTERP_DEFINES) -DDYNAMIC_TCL -DDYNAMIC_TCL_DLL=\"tcl$(TCL_VER).dll\"
-TCL_LIB = tclstub$(TCL_VER)-bor.lib
-TCL_LIB_FLAG =
-!endif
-!endif
-#
-# DO NOT change below:
-#
-CPUARG = -$(CPUNR)
-ALIGNARG = -a$(ALIGN)
-#
-!if ("$(DEBUG)"=="yes")
-DEFINES=$(DEFINES) -DDEBUG -D_DEBUG
-!endif
-#
-!if ("$(OLE)"=="yes")
-DEFINES = $(DEFINES) -DFEAT_OLE
-!endif
-#
-!if ("$(IME)"=="yes")
-MBDEFINES = $(MBDEFINES) -DFEAT_MBYTE_IME
-!if ("$(DYNAMIC_IME)" == "yes")
-MBDEFINES = $(MBDEFINES) -DDYNAMIC_IME
-!endif
-!endif
-!if ("$(ICONV)"=="yes")
-MBDEFINES = $(MBDEFINES) -DDYNAMIC_ICONV
-!endif
-!if ("$(GETTEXT)"=="yes")
-MBDEFINES = $(MBDEFINES) -DDYNAMIC_GETTEXT
-!endif
-
-!if ("$(CSCOPE)"=="yes")
-DEFINES = $(DEFINES) -DFEAT_CSCOPE
-!endif
-
-!if ("$(GUI)"=="yes")
-DEFINES = $(DEFINES) -DFEAT_GUI_MSWIN -DFEAT_CLIPBOARD
-!if ("$(DEBUG)"=="yes")
-TARGET = gvimd.exe
-!else
-TARGET = gvim.exe
-!endif
-EXETYPE=-W
-STARTUPOBJ = c0w32.obj
-LINK2 = -aa
-RESFILE = vim.res
-!else
-!undef NETBEANS
-!undef CHANNEL
-!undef XPM
-!if ("$(DEBUG)"=="yes")
-TARGET = vimd.exe
-!else
-# for now, anyway: VIMDLL is only for the GUI version
-TARGET = vim.exe
-!endif
-EXETYPE=-WC
-STARTUPOBJ = c0x32.obj
-LINK2 = -ap -OS -o -P
-RESFILE = vim.res
-!endif
-
-!if ("$(NETBEANS)"=="yes")
-!if ("$(CHANNEL)"!="yes")
-# cannot use Netbeans without CHANNEL
-NETBEANS = no
-!else
-DEFINES = $(DEFINES) -DFEAT_NETBEANS_INTG
-!if ("$(NBDEBUG)"=="yes")
-DEFINES = $(DEFINES) -DNBDEBUG
-NBDEBUG_DEP = nbdebug.h nbdebug.c
-!endif
-!endif
-!endif
-
-!if ("$(CHANNEL)"=="yes")
-DEFINES = $(DEFINES) -DFEAT_JOB_CHANNEL
-!endif
-
-!ifdef XPM
-!if ("$(GUI)"=="yes")
-DEFINES = $(DEFINES) -DFEAT_XPM_W32
-INCLUDE = $(XPM)\include;$(INCLUDE)
-!endif
-!endif
-
-!if ("$(USEDLL)"=="yes")
-DEFINES = $(DEFINES) -D_RTLDLL
-!endif
-
-!if ("$(DEBUG)"=="yes")
-OBJDIR	= $(OSTYPE)\objdbg
-!else
-!if ("$(GUI)"=="yes")
-!if ("$(OLE)"=="yes")
-OBJDIR	= $(OSTYPE)\oleobj
-!else
-OBJDIR	= $(OSTYPE)\gobj
-!endif
-!else
-OBJDIR	= $(OSTYPE)\obj
-!endif
-!endif
-
-!if ("$(POSTSCRIPT)"=="yes")
-DEFINES = $(DEFINES) -DMSWINPS
-!endif
-
-##### BASE COMPILER/TOOLS RULES #####
-MAKE = $(BOR)\bin\make
-CFLAGS = -w-aus -w-par -w-pch -w-ngu -w-csu -I$(INCLUDE)
-BRC = $(BOR)\BIN\brc32
-!if ("$(LINK)"=="")
-LINK	= $(BOR)\BIN\ILink32
-!endif
-CC   = $(BOR)\BIN\Bcc32
-LFLAGS	= -OS -Tpe -c -m -L$(LIB) $(DEBUG_FLAG) $(LINK2)
-LFLAGSDLL  = -Tpd -c -m -L$(LIB) $(DEBUG_FLAG) $(LINK2)
-CFLAGS = $(CFLAGS) -d -RT- -k- -Oi $(HEADERS) -f-
-
-CC1 = -c
-CC2 = -o
-CCARG = +$(OBJDIR)\bcc.cfg
-
-# implicit rules:
-
-# Without the following, the implicit rule in BUILTINS.MAK is picked up
-# for a rule for .c.obj rather than the local implicit rule
-.SUFFIXES
-.SUFFIXES .c .obj
-.path.c = .
-
-{.}.c{$(OBJDIR)}.obj:
-	$(CC) $(CCARG) $(CC1) -n$(OBJDIR)\ {$< }
-
-.cpp.obj:
-	$(CC) $(CCARG) $(CC1) $(CC2)$@ $*.cpp
-
-vimmain = \
-	$(OBJDIR)\os_w32exe.obj
-vimwinmain = \
-	$(OBJDIR)\os_w32exe.obj
-
-vimobj =  \
-	$(OBJDIR)\arabic.obj \
-	$(OBJDIR)\autocmd.obj \
-	$(OBJDIR)\blowfish.obj \
-	$(OBJDIR)\buffer.obj \
-	$(OBJDIR)\charset.obj \
-	$(OBJDIR)\crypt.obj \
-	$(OBJDIR)\crypt_zip.obj \
-	$(OBJDIR)\debugger.obj \
-	$(OBJDIR)\dict.obj \
-	$(OBJDIR)\diff.obj \
-	$(OBJDIR)\digraph.obj \
-	$(OBJDIR)\edit.obj \
-	$(OBJDIR)\eval.obj \
-	$(OBJDIR)\evalfunc.obj \
-	$(OBJDIR)\ex_cmds.obj \
-	$(OBJDIR)\ex_cmds2.obj \
-	$(OBJDIR)\ex_docmd.obj \
-	$(OBJDIR)\ex_eval.obj \
-	$(OBJDIR)\ex_getln.obj \
-	$(OBJDIR)\fileio.obj \
-	$(OBJDIR)\findfile.obj \
-	$(OBJDIR)\fold.obj \
-	$(OBJDIR)\getchar.obj \
-	$(OBJDIR)\hardcopy.obj \
-	$(OBJDIR)\hashtab.obj \
-	$(OBJDIR)\indent.obj \
-	$(OBJDIR)\insexpand.obj \
-	$(OBJDIR)\json.obj \
-	$(OBJDIR)\list.obj \
-	$(OBJDIR)\main.obj \
-	$(OBJDIR)\mark.obj \
-	$(OBJDIR)\memfile.obj \
-	$(OBJDIR)\memline.obj \
-	$(OBJDIR)\menu.obj \
-	$(OBJDIR)\message.obj \
-	$(OBJDIR)\misc1.obj \
-	$(OBJDIR)\misc2.obj \
-	$(OBJDIR)\move.obj \
-	$(OBJDIR)\mbyte.obj \
-	$(OBJDIR)\normal.obj \
-	$(OBJDIR)\ops.obj \
-	$(OBJDIR)\option.obj \
-	$(OBJDIR)\popupmnu.obj \
-	$(OBJDIR)\quickfix.obj \
-	$(OBJDIR)\regexp.obj \
-	$(OBJDIR)\screen.obj \
-	$(OBJDIR)\search.obj \
-	$(OBJDIR)\sha256.obj \
-	$(OBJDIR)\sign.obj \
-	$(OBJDIR)\spell.obj \
-	$(OBJDIR)\spellfile.obj \
-	$(OBJDIR)\syntax.obj \
-	$(OBJDIR)\tag.obj \
-	$(OBJDIR)\term.obj \
-	$(OBJDIR)\ui.obj \
-	$(OBJDIR)\undo.obj \
-	$(OBJDIR)\usercmd.obj \
-	$(OBJDIR)\userfunc.obj \
-	$(OBJDIR)\version.obj \
-	$(OBJDIR)\window.obj \
-	$(OBJDIR)\pathdef.obj
-
-!if ("$(OLE)"=="yes")
-vimobj = $(vimobj) \
-	$(OBJDIR)\if_ole.obj
-!endif
-
-!ifdef LUA
-vimobj = $(vimobj) \
-    $(OBJDIR)\if_lua.obj
-!endif
-
-!ifdef PERL
-vimobj = $(vimobj) \
-    $(OBJDIR)\if_perl.obj
-!endif
-
-!ifdef PYTHON
-vimobj = $(vimobj) \
-    $(OBJDIR)\if_python.obj
-!endif
-
-!ifdef PYTHON3
-vimobj = $(vimobj) \
-    $(OBJDIR)\if_python3.obj
-!endif
-
-!ifdef RUBY
-vimobj = $(vimobj) \
-    $(OBJDIR)\if_ruby.obj
-!endif
-
-!ifdef TCL
-vimobj = $(vimobj) \
-    $(OBJDIR)\if_tcl.obj
-!endif
-
-!if ("$(CSCOPE)"=="yes")
-vimobj = $(vimobj) \
-    $(OBJDIR)\if_cscope.obj
-!endif
-
-!if ("$(NETBEANS)"=="yes")
-vimobj = $(vimobj) \
-    $(OBJDIR)\netbeans.obj
-!endif
-
-!if ("$(CHANNEL)"=="yes")
-vimobj = $(vimobj) \
-    $(OBJDIR)\channel.obj
-!endif
-
-!ifdef XPM
-vimobj = $(vimobj) \
-    $(OBJDIR)\xpm_w32.obj
-!endif
-
-!if ("$(GUI)"=="yes")
-vimobj = $(vimobj) \
-	$(vimwinmain) \
-	$(OBJDIR)\gui.obj \
-	$(OBJDIR)\gui_beval.obj \
-	$(OBJDIR)\gui_w32.obj
-!endif
-
-vimobj = $(vimobj) \
-	$(OBJDIR)\os_win32.obj $(OBJDIR)\os_mswin.obj $(OBJDIR)\winclip.obj
-# Blab what we are going to do:
-MSG = Compiling $(OSTYPE) $(TARGET) $(OLETARGET), with:
-!if ("$(GUI)"=="yes")
-MSG = $(MSG) GUI
-!endif
-!if ("$(OLE)"=="yes")
-MSG = $(MSG) OLE
-!endif
-!if ("$(USEDLL)"=="yes")
-MSG = $(MSG) USEDLL
-!endif
-!if ("$(FASTCALL)"=="yes")
-MSG = $(MSG) FASTCALL
-!endif
-!if ("$(IME)"=="yes")
-MSG = $(MSG) IME
-! if "$(DYNAMIC_IME)" == "yes"
-MSG = $(MSG)(dynamic)
-! endif
-!endif
-!if ("$(GETTEXT)"=="yes")
-MSG = $(MSG) GETTEXT
-!endif
-!if ("$(ICONV)"=="yes")
-MSG = $(MSG) ICONV
-!endif
-!if ("$(DEBUG)"=="yes")
-MSG = $(MSG) DEBUG
-!endif
-!if ("$(CODEGUARD)"=="yes")
-MSG = $(MSG) CODEGUARD
-!endif
-!if ("$(CSCOPE)"=="yes")
-MSG = $(MSG) CSCOPE
-!endif
-!if ("$(NETBEANS)"=="yes")
-MSG = $(MSG) NETBEANS
-!endif
-!if ("$(CHANNEL)"=="yes")
-MSG = $(MSG) CHANNEL
-!endif
-!ifdef XPM
-MSG = $(MSG) XPM
-!endif
-!ifdef LUA
-MSG = $(MSG) LUA
-! if "$(DYNAMIC_LUA)" == "yes"
-MSG = $(MSG)(dynamic)
-! endif
-!endif
-!ifdef PERL
-MSG = $(MSG) PERL
-! if "$(DYNAMIC_PERL)" == "yes"
-MSG = $(MSG)(dynamic)
-! endif
-!endif
-!ifdef PYTHON
-MSG = $(MSG) PYTHON
-! if "$(DYNAMIC_PYTHON)" == "yes"
-MSG = $(MSG)(dynamic)
-! endif
-!endif
-!ifdef PYTHON3
-MSG = $(MSG) PYTHON3
-! if "$(DYNAMIC_PYTHON3)" == "yes"
-MSG = $(MSG)(dynamic)
-! endif
-!endif
-!ifdef RUBY
-MSG = $(MSG) RUBY
-! if "$(DYNAMIC_RUBY)" == "yes"
-MSG = $(MSG)(dynamic)
-! endif
-!endif
-!ifdef TCL
-MSG = $(MSG) TCL
-! if "$(DYNAMIC_TCL)" == "yes"
-MSG = $(MSG)(dynamic)
-! endif
-!endif
-MSG = $(MSG) cpu=$(CPUARG)
-MSG = $(MSG) Align=$(ALIGNARG)
-
-!message $(MSG)
-
-TARGETS = $(TARGETS) $(TARGET)
-
-# Targets:
-all: vim vimrun.exe install.exe xxd uninstal.exe GvimExt/gvimext.dll
-
-vim: $(OSTYPE) $(OBJDIR) $(OBJDIR)\bcc.cfg $(TARGETS)
-	@if exist $(OBJDIR)\version.obj del $(OBJDIR)\version.obj
-	@if exist auto\pathdef.c del auto\pathdef.c
-
-$(OSTYPE):
-	-@md $(OSTYPE)
-
-$(OBJDIR):
-	-@md $(OBJDIR)
-
-xxd:
-	@cd xxd
-	$(MAKE) /f Make_bc5.mak BOR="$(BOR)" BCC="$(CC)"
-	@cd ..
-
-GvimExt/gvimext.dll: GvimExt/gvimext.cpp GvimExt/gvimext.rc GvimExt/gvimext.h
-	cd GvimExt
-	$(MAKE) /f Make_bc5.mak USEDLL=$(USEDLL) BOR=$(BOR)
-	cd ..
-
-install.exe: dosinst.c $(OBJDIR)\bcc.cfg
-	$(CC) $(CCARG) -WC -DWIN32 -einstall dosinst.c
-
-uninstal.exe: uninstal.c $(OBJDIR)\bcc.cfg
-	$(CC) $(CCARG) -WC -DWIN32 -O2 -euninstal uninstal.c
-
-clean:
-!if "$(OS)" == "Windows_NT"
-	# For Windows NT/2000, doesn't work on Windows 95/98...
-	# $(COMSPEC) needed to ensure rmdir.exe is not run
-	-@$(COMSPEC) /C rmdir /Q /S $(OBJDIR)
-!else
-	# For Windows 95/98, doesn't work on Windows NT/2000...
-	-@deltree /y $(OBJDIR)
-!endif
-	-@del *.res
-	-@del vim32*.dll
-	-@del vim32*.lib
-	-@del *vim*.exe
-	-@del *install*.exe
-	-@del *.csm
-	-@del *.map
-	-@del *.ilc
-	-@del *.ild
-	-@del *.ilf
-	-@del *.ils
-	-@del *.tds
-!ifdef LUA
-	-@del lua.lib
-!endif
-!ifdef PERL
-	-@del perl.lib
-	-@del if_perl.c
-	-@del auto\if_perl.c
-!endif
-!ifdef PYTHON
-	-@del python.lib
-!endif
-!ifdef PYTHON3
-	-@del python3.lib
-!endif
-!ifdef RUBY
-	-@del ruby.lib
-!endif
-!ifdef TCL
-	-@del tcl.lib
-!endif
-!ifdef XPM
-	-@del xpm.lib
-!endif
-	cd xxd
-	$(MAKE) /f Make_bc5.mak BOR="$(BOR)" clean
-	cd ..
-	cd GvimExt
-	$(MAKE) /f Make_bc5.mak BOR="$(BOR)" clean
-	cd ..
-
-
-$(TARGET): $(OBJDIR) $(vimobj) $(OBJDIR)\$(RESFILE)
-  $(LINK) @&&|
-	$(LFLAGS) +
-	$(STARTUPOBJ) +
-	$(vimobj)
-	$<,$*
-!if ("$(CODEGUARD)"=="yes")
-	cg32.lib+
-!endif
-# $(OSTYPE)==WIN32 causes os_mswin.c compilation. FEAT_SHORTCUT in it needs OLE
-	ole2w32.lib +
-	import32.lib+
-!ifdef LUA
-	$(LUA_LIB_FLAG)lua.lib+
-!endif
-!ifdef PERL
-	$(PERL_LIB_FLAG)perl.lib+
-!endif
-!ifdef PYTHON
-	$(PYTHON_LIB_FLAG)python.lib+
-!endif
-!ifdef PYTHON3
-	$(PYTHON3_LIB_FLAG)python3.lib+
-!endif
-!ifdef RUBY
-	$(RUBY_LIB_FLAG)ruby.lib+
-!endif
-!ifdef TCL
-	$(TCL_LIB_FLAG)tcl.lib+
-!endif
-!ifdef XPM
-	xpm.lib+
-!endif
-!if ("$(USEDLL)"=="yes")
-	cw32i.lib
-!else
-	cw32.lib
-!endif
-
-	$(OBJDIR)\$(RESFILE)
-|
-
-test:
-	cd testdir
-	$(MAKE) /NOLOGO -f Make_dos.mak win32
-	cd ..
-
-$(OBJDIR)\ex_docmd.obj:  ex_docmd.c ex_cmds.h
-
-$(OBJDIR)\ex_eval.obj:  ex_eval.c ex_cmds.h
-
-$(OBJDIR)\if_ole.obj: if_ole.cpp
-
-$(OBJDIR)\if_lua.obj: if_lua.c lua.lib
-	$(CC) $(CCARG) $(CC1) $(CC2)$@ -pc if_lua.c
-
-$(OBJDIR)\if_perl.obj: auto/if_perl.c perl.lib
-	$(CC) $(CCARG) $(CC1) $(CC2)$@ -pc auto/if_perl.c
-
-auto/if_perl.c: if_perl.xs typemap
-	$(PERL)\bin\perl.exe $(PERL)\lib\ExtUtils\xsubpp -prototypes -typemap \
-	    $(PERL)\lib\ExtUtils\typemap if_perl.xs -output $@
-
-$(OBJDIR)\if_python.obj: if_python.c if_py_both.h python.lib
-	$(CC) -I$(PYTHON)\include $(CCARG) $(CC1) $(CC2)$@ -pc if_python.c
-
-$(OBJDIR)\if_python3.obj: if_python3.c if_py_both.h python3.lib
-	$(CC) -I$(PYTHON3)\include $(CCARG) $(CC1) $(CC2)$@ -pc if_python3.c
-
-$(OBJDIR)\if_ruby.obj: if_ruby.c ruby.lib
-	$(CC) $(CCARG) $(CC1) $(CC2)$@ -pc if_ruby.c
-
-$(OBJDIR)\if_tcl.obj: if_tcl.c tcl.lib
-	$(CC) $(CCARG) $(CC1) $(CC2)$@ -pc if_tcl.c
-
-$(OBJDIR)\xpm_w32.obj: xpm_w32.c xpm.lib
-	$(CC) $(CCARG) $(CC1) $(CC2)$@ -pc xpm_w32.c
-
-$(OBJDIR)\netbeans.obj: netbeans.c $(NBDEBUG_DEP)
-	$(CC) $(CCARG) $(CC1) $(CC2)$@ netbeans.c
-
-$(OBJDIR)\channel.obj: channel.c
-	$(CC) $(CCARG) $(CC1) $(CC2)$@ channel.c
-
-$(OBJDIR)\vim.res: vim.rc version.h tools.bmp tearoff.bmp \
-		vim.ico vim_error.ico vim_alert.ico vim_info.ico vim_quest.ico
-	$(BRC) -fo$(OBJDIR)\vim.res -i $(BOR)\include -w32 -r vim.rc @&&|
-	$(DEFINES)
-|
-
-$(OBJDIR)\pathdef.obj:	auto\pathdef.c
-	$(CC) $(CCARG) $(CC1) $(CC2)$@ auto\pathdef.c
-
-
-# Need to escape both quotes and backslashes in $INTERP_DEFINES
-INTERP_DEFINES_ESC_BKS=$(INTERP_DEFINES:\=\\)
-INTERP_DEFINES_ESC=$(INTERP_DEFINES_ESC_BKS:"=\")
-
-# Note:  the silly /*"*/ below are there to trick make into accepting
-# the # character as something other than a comment without messing up
-# the preprocessor directive.
-auto\pathdef.c::
-	-@md auto
-	@echo creating auto/pathdef.c
-	@copy /y &&|
-/* pathdef.c */
-/*"*/#include "vim.h"/*"*/
-
-char_u *default_vim_dir = (char_u *)"$(VIMRCLOC:\=\\)";
-char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR:\=\\)";
-char_u *all_cflags = (char_u *)"$(CC:\=\\) $(CFLAGS:\=\\) $(DEFINES) $(MBDEFINES) $(INTERP_DEFINES_ESC) $(OPT) $(EXETYPE) $(CPUARG) $(ALIGNARG) $(DEBUG_FLAG) $(CODEGUARD_FLAG)";
-char_u *all_lflags = (char_u *)"$(LINK:\=\\) $(LFLAGS:\=\\)";
-char_u *compiled_user = (char_u *)"$(USERNAME)";
-char_u *compiled_sys = (char_u *)"$(USERDOMAIN)";
-| auto\pathdef.c
-
-lua.lib: $(LUA)\lib\lua$(LUA_VER).lib
-	coff2omf $(LUA)\lib\lua$(LUA_VER).lib $@
-
-perl.lib: $(PERL)\lib\CORE\perl$(PERL_VER).lib
-	coff2omf $(PERL)\lib\CORE\perl$(PERL_VER).lib $@
-
-python.lib: $(PYTHON)\libs\python$(PYTHON_VER).lib
-	coff2omf $(PYTHON)\libs\python$(PYTHON_VER).lib $@
-
-python3.lib: $(PYTHON3)\libs\python$(PYTHON3_VER).lib
-	coff2omf $(PYTHON3)\libs\python$(PYTHON3_VER).lib $@
-
-ruby.lib: $(RUBY)\lib\$(RUBY_INSTALL_NAME).lib
-	coff2omf $(RUBY)\lib\$(RUBY_INSTALL_NAME).lib $@
-
-# For some reason, the coff2omf method doesn't work on libXpm.lib, so
-# we have to manually generate an import library straight from the DLL.
-xpm.lib: $(XPM)\lib\libXpm.lib
-	implib -a $@ $(XPM)\bin\libXpm.dll
-
-tcl.lib: $(TCL_LIB)
-!if ("$(DYNAMIC_TCL)" == "yes")
-	copy $(TCL_LIB) $@
-!else
-	coff2omf $(TCL_LIB) $@
-!endif
-
-!if ("$(DYNAMIC_TCL)" == "yes")
-tclstub$(TCL_VER)-bor.lib:
-	-@IF NOT EXIST $@ ECHO You must download tclstub$(TCL_VER)-bor.lib separately and\
-	place it in the src directory in order to compile a dynamic TCL-enabled\
-	(g)vim with the Borland compiler.  You can get the tclstub$(TCL_VER)-bor.lib file\
-	at http://mywebpage.netscape.com/sharppeople/vim/tclstub$(TCL_VER)-bor.lib
-!endif
-
-# vimrun.exe:
-vimrun.exe: vimrun.c
-!if ("$(USEDLL)"=="yes")
-	$(CC) -WC -O1 -I$(INCLUDE) -L$(LIB) -D_RTLDLL vimrun.c cw32mti.lib
-!else
-	$(CC) -WC -O1 -I$(INCLUDE) -L$(LIB) vimrun.c
-!endif
-
-# The dependency on $(OBJDIR) is to have bcc.cfg generated each time.
-$(OBJDIR)\bcc.cfg: Make_bc5.mak $(OBJDIR)
-  copy /y &&|
-	$(CFLAGS)
-	-L$(LIB)
-	$(DEFINES)
-	$(MBDEFINES)
-	$(INTERP_DEFINES)
-	$(EXETYPE)
-	$(DEBUG_FLAG)
-	$(OPT)
-	$(CODEGUARD_FLAG)
-	$(CPUARG)
-	$(ALIGNARG)
-| $@
-
-# vi:set sts=4 sw=4:
-
diff --git a/src/dosinst.c b/src/dosinst.c
index ca74758..b975ff8 100644
--- a/src/dosinst.c
+++ b/src/dosinst.c
@@ -10,7 +10,7 @@
 /*
  * dosinst.c: Install program for Vim on MS-DOS and MS-Windows
  *
- * Compile with Make_mvc.mak, Make_bc3.mak, Make_bc5.mak or Make_djg.mak.
+ * Compile with Make_mvc.mak, Make_cyg.mak or Make_ming.mak.
  */
 
 /*
diff --git a/src/dosinst.h b/src/dosinst.h
index 7f30e90..7cb4139 100644
--- a/src/dosinst.h
+++ b/src/dosinst.h
@@ -47,11 +47,7 @@
 #if defined(UNIX_LINT)
 # define vim_mkdir(x, y) mkdir((char *)(x), y)
 #else
-# ifndef __BORLANDC__
-#  define vim_mkdir(x, y) _mkdir((char *)(x))
-# else
-#  define vim_mkdir(x, y) mkdir((char *)(x))
-# endif
+# define vim_mkdir(x, y) _mkdir((char *)(x))
 #endif
 
 #define sleep(n) Sleep((n) * 1000)
@@ -150,10 +146,6 @@
 #endif
 }
 
-#ifdef __BORLANDC__
-/* Borland defines its own searchpath() in dir.h */
-# include <dir.h>
-#else
     static char *
 searchpath(char *name)
 {
@@ -173,7 +165,6 @@
     }
     return NULL;
 }
-#endif
 
 /*
  * Call searchpath() and save the result in allocated memory, or return NULL.
@@ -463,12 +454,6 @@
 /*
  * Expand the executable name into a full path name.
  */
-#if defined(__BORLANDC__)
-
-/* Only Borland C++ has this. */
-# define my_fullpath(b, n, l) _fullpath(b, n, l)
-
-#else
     static char *
 my_fullpath(char *buf, char *fname, int len)
 {
@@ -478,7 +463,6 @@
 
     return (len_read > 0 && len_read < (DWORD)len) ? buf : NULL;
 }
-#endif
 
 /*
  * Remove the tail from a file or directory name.
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 2676832..f3b1faf 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -12500,16 +12500,8 @@
 }
 #endif
 
-static int
-#ifdef __BORLANDC__
-    _RTLENTRYF
-#endif
-	item_compare(const void *s1, const void *s2);
-static int
-#ifdef __BORLANDC__
-    _RTLENTRYF
-#endif
-	item_compare2(const void *s1, const void *s2);
+static int item_compare(const void *s1, const void *s2);
+static int item_compare2(const void *s1, const void *s2);
 
 /* struct used in the array that's given to qsort() */
 typedef struct
@@ -12540,9 +12532,6 @@
  * Compare functions for f_sort() and f_uniq() below.
  */
     static int
-#ifdef __BORLANDC__
-_RTLENTRYF
-#endif
 item_compare(const void *s1, const void *s2)
 {
     sortItem_T  *si1, *si2;
@@ -12627,9 +12616,6 @@
 }
 
     static int
-#ifdef __BORLANDC__
-_RTLENTRYF
-#endif
 item_compare2(const void *s1, const void *s2)
 {
     sortItem_T  *si1, *si2;
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index ebfcf54..8da5dfd 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -29,11 +29,7 @@
 
 static int check_readonly(int *forceit, buf_T *buf);
 static void delbuf_msg(char_u *name);
-static int
-#ifdef __BORLANDC__
-    _RTLENTRYF
-#endif
-	help_compare(const void *s1, const void *s2);
+static int help_compare(const void *s1, const void *s2);
 static void prepare_help_buffer(void);
 
 /*
@@ -314,16 +310,9 @@
     } st_u;
 } sorti_T;
 
-static int
-#ifdef __BORLANDC__
-_RTLENTRYF
-#endif
-sort_compare(const void *s1, const void *s2);
+static int sort_compare(const void *s1, const void *s2);
 
     static int
-#ifdef __BORLANDC__
-_RTLENTRYF
-#endif
 sort_compare(const void *s1, const void *s2)
 {
     sorti_T	l1 = *(sorti_T *)s1;
@@ -6580,9 +6569,6 @@
  * that has been put after the tagname by find_tags().
  */
     static int
-#ifdef __BORLANDC__
-_RTLENTRYF
-#endif
 help_compare(const void *s1, const void *s2)
 {
     char    *p1;
diff --git a/src/ex_getln.c b/src/ex_getln.c
index b2b6f53..f1c30a2 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -125,11 +125,7 @@
 #endif
 
 #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
-static int
-#ifdef __BORLANDC__
-_RTLENTRYF
-#endif
-sort_func_compare(const void *s1, const void *s2);
+static int	sort_func_compare(const void *s1, const void *s2);
 #endif
 
 
@@ -3803,9 +3799,6 @@
 
 #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
     static int
-#ifdef __BORLANDC__
-_RTLENTRYF
-#endif
 sort_func_compare(const void *s1, const void *s2)
 {
     char_u *p1 = *(char_u **)s1;
@@ -6855,9 +6848,6 @@
 
 #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
     static int
-#ifdef __BORLANDC__
-_RTLENTRYF
-#endif
 sort_hist(const void *s1, const void *s2)
 {
     histentry_T *p1 = *(histentry_T **)s1;
diff --git a/src/gui_w32.c b/src/gui_w32.c
index 8d28148..5961830 100644
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -1303,9 +1303,6 @@
     int
 gui_mch_open(void)
 {
-#ifndef SW_SHOWDEFAULT
-# define SW_SHOWDEFAULT 10	/* Borland 5.0 doesn't have it */
-#endif
     /* Actually open the window, if not already visible
      * (may be done already in gui_mch_set_shellsize) */
     if (!IsWindowVisible(s_hwnd))
@@ -3799,9 +3796,6 @@
  * Add a lot of missing defines.
  * They are not always missing, we need the #ifndef's.
  */
-# ifndef _cdecl
-#  define _cdecl
-# endif
 # ifndef IsMinimized
 #  define     IsMinimized(hwnd)		IsIconic(hwnd)
 # endif
@@ -5521,7 +5515,7 @@
  * First static functions (no prototypes generated).
  */
 # ifdef _MSC_VER
-#  include <ime.h>   /* Apparently not needed for Cygwin, MingW or Borland. */
+#  include <ime.h>   /* Apparently not needed for Cygwin or MinGW. */
 # endif
 # include <imm.h>
 
@@ -6272,15 +6266,6 @@
     void
 gui_mch_flush(void)
 {
-#   if defined(__BORLANDC__)
-    /*
-     * The GdiFlush declaration (in Borland C 5.01 <wingdi.h>) is not a
-     * prototype declaration.
-     * The compiler complains if __stdcall is not used in both declarations.
-     */
-    BOOL  __stdcall GdiFlush(void);
-#   endif
-
 #if defined(FEAT_DIRECTX)
     if (IS_ENABLE_DIRECTX())
 	DWriteContext_Flush(s_dwc);
diff --git a/src/if_ole.cpp b/src/if_ole.cpp
index 8780847..e52f5ec 100644
--- a/src/if_ole.cpp
+++ b/src/if_ole.cpp
@@ -12,24 +12,14 @@
  *
  * See os_mswin.c for the client side.
  */
-
-/*
- * We have some trouble with order of includes here.  For Borland it needs to
- * be different from MSVC...
- */
-#ifndef __BORLANDC__
 extern "C" {
 # include "vim.h"
 }
-#endif
 
 #include <windows.h>
 #include <oleauto.h>
 
 extern "C" {
-#ifdef __BORLANDC__
-# include "vim.h"
-#endif
 extern HWND s_hwnd;
 extern HWND vim_parent_hwnd;
 }
diff --git a/src/if_py_both.h b/src/if_py_both.h
index 498972d..4e1a42a 100644
--- a/src/if_py_both.h
+++ b/src/if_py_both.h
@@ -13,11 +13,6 @@
  * Common code for if_python.c and if_python3.c.
  */
 
-#ifdef __BORLANDC__
-/* Disable Warning W8060: Possibly incorrect assignment in function ... */
-# pragma warn -8060
-#endif
-
 static char_u e_py_systemexit[]	= "E880: Can't handle SystemExit of %s exception in vim";
 
 #if PY_VERSION_HEX < 0x02050000
diff --git a/src/main.c b/src/main.c
index 6d30143..d01cf9b 100644
--- a/src/main.c
+++ b/src/main.c
@@ -98,9 +98,6 @@
 # endif
     int
 # ifdef MSWIN
-#  ifdef __BORLANDC__
-_cdecl
-#  endif
 VimMain
 # else
 main
diff --git a/src/mark.c b/src/mark.c
index 1b34c20..eb36541 100644
--- a/src/mark.c
+++ b/src/mark.c
@@ -1950,9 +1950,6 @@
  * Compare functions for qsort() below, that compares b_last_used.
  */
     static int
-#ifdef __BORLANDC__
-_RTLENTRYF
-#endif
 buf_compare(const void *s1, const void *s2)
 {
     buf_T *buf1 = *(buf_T **)s1;
diff --git a/src/message.c b/src/message.c
index 7c25658..0ddff8b 100644
--- a/src/message.c
+++ b/src/message.c
@@ -357,9 +357,6 @@
 int vim_snprintf(char *str, size_t str_m, const char *fmt, ...);
 
     int
-# ifdef __BORLANDC__
-_RTLENTRYF
-# endif
 smsg(const char *s, ...)
 {
     va_list arglist;
@@ -371,9 +368,6 @@
 }
 
     int
-# ifdef __BORLANDC__
-_RTLENTRYF
-# endif
 smsg_attr(int attr, const char *s, ...)
 {
     va_list arglist;
@@ -385,9 +379,6 @@
 }
 
     int
-# ifdef __BORLANDC__
-_RTLENTRYF
-# endif
 smsg_attr_keep(int attr, const char *s, ...)
 {
     va_list arglist;
@@ -3091,7 +3082,7 @@
 	    (isatty(2) && strcmp("/dev/console", ttyname(2)) != 0)
 #  else
 	    isatty(2)
-#   endif
+#  endif
 #  ifdef FEAT_GUI
 	    ||
 #  endif
diff --git a/src/misc1.c b/src/misc1.c
index 3797094..a1c9a82 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -5626,18 +5626,11 @@
  * File name expansion code for MS-DOS, Win16 and Win32.  It's here because
  * it's shared between these systems.
  */
-# if defined(PROTO)
-#  define _cdecl
-# else
-#  ifdef __BORLANDC__
-#   define _cdecl _RTLENTRYF
-#  endif
-# endif
 
 /*
  * comparison function for qsort in dos_expandpath()
  */
-    static int _cdecl
+    static int
 pstrcmp(const void *a, const void *b)
 {
     return (pathcmp(*(char **)a, *(char **)b, -1));
diff --git a/src/misc2.c b/src/misc2.c
index 3ef7c94..f9f6bf5 100644
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -3912,16 +3912,9 @@
 /*
  * Sort an array of strings.
  */
-static int
-#ifdef __BORLANDC__
-_RTLENTRYF
-#endif
-sort_compare(const void *s1, const void *s2);
+static int sort_compare(const void *s1, const void *s2);
 
     static int
-#ifdef __BORLANDC__
-_RTLENTRYF
-#endif
 sort_compare(const void *s1, const void *s2)
 {
     return STRCMP(*(char **)s1, *(char **)s2);
diff --git a/src/normal.c b/src/normal.c
index 8d4cf09..e297a2e 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -27,11 +27,7 @@
 #ifdef FEAT_EVAL
 static void	set_vcount_ca(cmdarg_T *cap, int *set_prevcount);
 #endif
-static int
-#ifdef __BORLANDC__
-    _RTLENTRYF
-#endif
-		nv_compare(const void *s1, const void *s2);
+static int	nv_compare(const void *s1, const void *s2);
 static void	op_colon(oparg_T *oap);
 static void	op_function(oparg_T *oap);
 #if defined(FEAT_MOUSE)
@@ -422,9 +418,6 @@
  * through the index in nv_cmd_idx[].
  */
     static int
-#ifdef __BORLANDC__
-_RTLENTRYF
-#endif
 nv_compare(const void *s1, const void *s2)
 {
     int		c1, c2;
diff --git a/src/option.c b/src/option.c
index 657c011..a9b9780 100644
--- a/src/option.c
+++ b/src/option.c
@@ -12561,11 +12561,6 @@
 
 #ifdef FEAT_LINEBREAK
 
-# if defined(__BORLANDC__) && (__BORLANDC__ < 0x500)
-   /* Borland C++ screws up loop optimisation here (negri) */
-  #pragma option -O-l
-# endif
-
 /*
  * fill_breakat_flags() -- called when 'breakat' changes value.
  */
@@ -12582,11 +12577,6 @@
 	for (p = p_breakat; *p; p++)
 	    breakat_flags[*p] = TRUE;
 }
-
-# if defined(__BORLANDC__) && (__BORLANDC__ < 0x500)
-  #pragma option -O.l
-# endif
-
 #endif
 
 /*
diff --git a/src/os_mswin.c b/src/os_mswin.c
index 9179e9b..fc6806d 100644
--- a/src/os_mswin.c
+++ b/src/os_mswin.c
@@ -172,26 +172,6 @@
     return !SetCurrentDirectory(temp);
 }
 # endif
-#else
-# ifdef __BORLANDC__
-/* being a more ANSI compliant compiler, BorlandC doesn't define _stricoll:
- * but it does in BC 5.02! */
-#  if __BORLANDC__ < 0x502
-int _stricoll(char *a, char *b)
-{
-#   if 1
-    // this is fast but not correct:
-    return stricmp(a, b);
-#   else
-    // the ANSI-ish correct way is to use strxfrm():
-    char a_buff[512], b_buff[512];  // file names, so this is enough on Win32
-    strxfrm(a_buff, a, 512);
-    strxfrm(b_buff, b, 512);
-    return strcoll(a_buff, b_buff);
-#   endif
-}
-#  endif
-# endif
 #endif
 
 
@@ -374,30 +354,22 @@
     int		force UNUSED)
 {
     int		nResult = FAIL;
+    WCHAR	*wname;
+    WCHAR	wbuf[MAX_PATH];
+    char_u	*cname = NULL;
 
-#ifdef __BORLANDC__
-    if (*fname == NUL) /* Borland behaves badly here - make it consistent */
-	nResult = mch_dirname(buf, len);
-    else
-#endif
+    wname = enc_to_utf16(fname, NULL);
+    if (wname != NULL && _wfullpath(wbuf, wname, MAX_PATH) != NULL)
     {
-	WCHAR	*wname;
-	WCHAR	wbuf[MAX_PATH];
-	char_u	*cname = NULL;
-
-	wname = enc_to_utf16(fname, NULL);
-	if (wname != NULL && _wfullpath(wbuf, wname, MAX_PATH) != NULL)
+	cname = utf16_to_enc((short_u *)wbuf, NULL);
+	if (cname != NULL)
 	{
-	    cname = utf16_to_enc((short_u *)wbuf, NULL);
-	    if (cname != NULL)
-	    {
-		vim_strncpy(buf, cname, len - 1);
-		nResult = OK;
-	    }
+	    vim_strncpy(buf, cname, len - 1);
+	    nResult = OK;
 	}
-	vim_free(wname);
-	vim_free(cname);
     }
+    vim_free(wname);
+    vim_free(cname);
 
 #ifdef USE_FNAME_CASE
     fname_case(buf, len);
@@ -2044,9 +2016,6 @@
  * Clean up on exit. This destroys the hidden message window.
  */
     static void
-#ifdef __BORLANDC__
-    _RTLENTRYF
-#endif
 CleanUpMessaging(void)
 {
     if (message_window != 0)
diff --git a/src/os_w32exe.c b/src/os_w32exe.c
index efdbc96..c4f0294 100644
--- a/src/os_w32exe.c
+++ b/src/os_w32exe.c
@@ -15,19 +15,13 @@
  */
 #include "vim.h"
 
-#ifdef __MINGW32__
-# ifndef _cdecl
-#  define _cdecl
-# endif
-#endif
-
 // cproto doesn't create a prototype for VimMain()
 #ifdef VIMDLL
 __declspec(dllimport)
 #endif
-int _cdecl VimMain(int argc, char **argv);
+int VimMain(int argc, char **argv);
 #ifndef VIMDLL
-void _cdecl SaveInst(HINSTANCE hInst);
+void SaveInst(HINSTANCE hInst);
 #endif
 
 #ifndef PROTO
diff --git a/src/os_win32.c b/src/os_win32.c
index cbb09af..54ca4de 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -146,11 +146,6 @@
 # define __stdcall /* empty */
 #endif
 
-#if defined(__BORLANDC__)
-/* Strangely Borland uses a non-standard name. */
-# define wcsicmp(a, b) wcscmpi((a), (b))
-#endif
-
 #if !defined(FEAT_GUI_MSWIN) || defined(VIMDLL)
 /* Win32 Console handles for input and output */
 static HANDLE g_hConIn  = INVALID_HANDLE_VALUE;
@@ -941,9 +936,6 @@
 
 /* The return code indicates key code size. */
     static int
-#ifdef __BORLANDC__
-    __stdcall
-#endif
 win32_kbd_patch_key(
     KEY_EVENT_RECORD *pker)
 {
@@ -6695,8 +6687,6 @@
     int
 mch_open(const char *name, int flags, int mode)
 {
-    /* _wopen() does not work with Borland C 5.5: creates a read-only file. */
-#ifndef __BORLANDC__
     WCHAR	*wn;
     int		f;
 
@@ -6707,16 +6697,6 @@
     f = _wopen(wn, flags, mode);
     vim_free(wn);
     return f;
-#else
-    /* open() can open a file which name is longer than _MAX_PATH bytes
-     * and shorter than _MAX_PATH characters successfully, but sometimes it
-     * causes unexpected error in another part. We make it an error explicitly
-     * here. */
-    if (strlen(name) >= _MAX_PATH)
-	return -1;
-
-    return open(name, flags, mode);
-#endif
 }
 
 /*
diff --git a/src/os_win32.h b/src/os_win32.h
index ea10182..2169bd3 100644
--- a/src/os_win32.h
+++ b/src/os_win32.h
@@ -53,12 +53,10 @@
 
 #define FEAT_SHORTCUT		/* resolve shortcuts */
 
-#if (!defined(__BORLANDC__) || __BORLANDC__ >= 0x550) \
-	&& (!defined(_MSC_VER) || _MSC_VER > 1020)
+#if (!defined(_MSC_VER) || _MSC_VER > 1020)
 /*
  * Access Control List (actually security info).
- * Borland has the acl stuff only in version 5.5 and later.
- * MSVC in 5.0, not in 4.2, don't know about 4.3.
+ * MSVC has acl stuff only in 5.0, not in 4.2, don't know about 4.3.
  */
 # define HAVE_ACL
 #endif
@@ -142,8 +140,8 @@
 # define IO_REPARSE_TAG_SYMLINK		0xA000000C
 #endif
 
-#if defined(_MSC_VER) || defined(__BORLANDC__)
-    /* Support for __try / __except.  All versions of MSVC and Borland C are
+#if defined(_MSC_VER)
+    /* Support for __try / __except.  All versions of MSVC are
      * expected to have this.  Any other compilers that support it? */
 # define HAVE_TRY_EXCEPT 1
 # include <malloc.h>		/* for _resetstkoflw() */
@@ -206,11 +204,7 @@
 # define HAVE_SETENV
 #endif
 #define mch_getenv(x) (char_u *)getenv((char *)(x))
-#ifdef __BORLANDC__
-# define vim_mkdir(x, y) mkdir(x)
-#else
-# define vim_mkdir(x, y) mch_mkdir(x)
-#endif
+#define vim_mkdir(x, y) mch_mkdir(x)
 
 /* Enable common dialogs input unicode from IME if possible. */
 #define pDispatchMessage DispatchMessageW
diff --git a/src/proto.h b/src/proto.h
index e34af85..8027232 100644
--- a/src/proto.h
+++ b/src/proto.h
@@ -42,8 +42,7 @@
 #  include "os_win32.pro"
 #  include "os_mswin.pro"
 #  include "winclip.pro"
-#  if (defined(__GNUC__) && !defined(__MINGW32__)) \
-	|| (defined(__BORLANDC__) && __BORLANDC__ < 0x502)
+#  if (defined(__GNUC__) && !defined(__MINGW32__))
 extern int _stricoll(char *a, char *b);
 #  endif
 # endif
@@ -108,73 +107,45 @@
 # endif
 
 /* These prototypes cannot be produced automatically. */
-int
-#  ifdef __BORLANDC__
-_RTLENTRYF
-#  endif
-smsg(const char *, ...)
+int smsg(const char *, ...)
 #ifdef USE_PRINTF_FORMAT_ATTRIBUTE
     __attribute__((format(printf, 1, 0)))
 #endif
     ;
 
-int
-#  ifdef __BORLANDC__
-_RTLENTRYF
-#  endif
-smsg_attr(int, const char *, ...)
+int smsg_attr(int, const char *, ...)
 #ifdef USE_PRINTF_FORMAT_ATTRIBUTE
     __attribute__((format(printf, 2, 3)))
 #endif
     ;
 
-int
-#  ifdef __BORLANDC__
-_RTLENTRYF
-#  endif
-smsg_attr_keep(int, const char *, ...)
+int smsg_attr_keep(int, const char *, ...)
 #ifdef USE_PRINTF_FORMAT_ATTRIBUTE
     __attribute__((format(printf, 2, 3)))
 #endif
     ;
 
 /* These prototypes cannot be produced automatically. */
-int
-#  ifdef __BORLANDC__
-_RTLENTRYF
-#  endif
-semsg(const char *, ...)
+int semsg(const char *, ...)
 #ifdef USE_PRINTF_FORMAT_ATTRIBUTE
     __attribute__((format(printf, 1, 0)))
 #endif
     ;
 
 /* These prototypes cannot be produced automatically. */
-void
-#  ifdef __BORLANDC__
-_RTLENTRYF
-#  endif
-siemsg(const char *, ...)
+void siemsg(const char *, ...)
 #ifdef USE_PRINTF_FORMAT_ATTRIBUTE
     __attribute__((format(printf, 1, 0)))
 #endif
     ;
 
-int
-#  ifdef __BORLANDC__
-_RTLENTRYF
-#  endif
-vim_snprintf_add(char *, size_t, const char *, ...)
+int vim_snprintf_add(char *, size_t, const char *, ...)
 #ifdef USE_PRINTF_FORMAT_ATTRIBUTE
     __attribute__((format(printf, 3, 4)))
 #endif
     ;
 
-int
-#  ifdef __BORLANDC__
-_RTLENTRYF
-#  endif
-vim_snprintf(char *, size_t, const char *, ...)
+int vim_snprintf(char *, size_t, const char *, ...)
 #ifdef USE_PRINTF_FORMAT_ATTRIBUTE
     __attribute__((format(printf, 3, 4)))
 #endif
@@ -209,7 +180,7 @@
 # endif
 # include "search.pro"
 # ifdef FEAT_SIGNS
-# include "sign.pro"
+#  include "sign.pro"
 # endif
 # include "spell.pro"
 # include "spellfile.pro"
@@ -337,13 +308,7 @@
  */
 #if defined(FEAT_PERL) && !defined(IN_PERL_FILE)
 # define CV void
-# ifdef __BORLANDC__
-  #pragma option -pc
-# endif
 # include "if_perl.pro"
-# ifdef __BORLANDC__
-  #pragma option -p.
-# endif
 # include "if_perlsfio.pro"
 #endif
 
@@ -357,8 +322,4 @@
 void clip_mch_request_selection(VimClipboard *cbd);
 void clip_mch_set_selection(VimClipboard *cbd);
 #endif
-
-#ifdef __BORLANDC__
-# define _PROTO_H
-#endif
 #endif /* !PROTO && !NOPROTO */
diff --git a/src/screen.c b/src/screen.c
index e56d2bc..3ebc244 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -2945,9 +2945,6 @@
 static buf_T		*current_buf = NULL;
 
     static int
-#ifdef __BORLANDC__
-_RTLENTRYF
-#endif
 text_prop_compare(const void *s1, const void *s2)
 {
     int  idx1, idx2;
diff --git a/src/spell.c b/src/spell.c
index 947bee5..8f32fd7 100644
--- a/src/spell.c
+++ b/src/spell.c
@@ -6760,20 +6760,13 @@
     }
 }
 
-static int
-#ifdef __BORLANDC__
-_RTLENTRYF
-#endif
-sug_compare(const void *s1, const void *s2);
+static int sug_compare(const void *s1, const void *s2);
 
 /*
  * Function given to qsort() to sort the suggestions on st_score.
  * First on "st_score", then "st_altscore" then alphabetically.
  */
     static int
-#ifdef __BORLANDC__
-_RTLENTRYF
-#endif
 sug_compare(const void *s1, const void *s2)
 {
     suggest_T	*p1 = (suggest_T *)s1;
diff --git a/src/spellfile.c b/src/spellfile.c
index 00f6b7c..2616afb 100644
--- a/src/spellfile.c
+++ b/src/spellfile.c
@@ -4802,19 +4802,12 @@
     return p1 == NULL && p2 == NULL;
 }
 
-static int
-#ifdef __BORLANDC__
-_RTLENTRYF
-#endif
-rep_compare(const void *s1, const void *s2);
+static int rep_compare(const void *s1, const void *s2);
 
 /*
  * Function given to qsort() to sort the REP items on "from" string.
  */
     static int
-#ifdef __BORLANDC__
-_RTLENTRYF
-#endif
 rep_compare(const void *s1, const void *s2)
 {
     fromto_T	*p1 = (fromto_T *)s1;
diff --git a/src/syntax.c b/src/syntax.c
index b492505..537794a 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -5348,9 +5348,6 @@
  * A simple syntax group ID comparison function suitable for use in qsort()
  */
     static int
-#ifdef __BORLANDC__
-_RTLENTRYF
-#endif
 syn_compare_stub(const void *v1, const void *v2)
 {
     const short	*s1 = v1;
@@ -6703,9 +6700,6 @@
 } time_entry_T;
 
     static int
-#ifdef __BORLANDC__
-_RTLENTRYF
-#endif
 syn_compare_syntime(const void *v1, const void *v2)
 {
     const time_entry_T	*s1 = v1;
diff --git a/src/userfunc.c b/src/userfunc.c
index bd7d2f7..28cf8b8 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -55,16 +55,8 @@
 static void func_do_profile(ufunc_T *fp);
 static void prof_sort_list(FILE *fd, ufunc_T **sorttab, int st_len, char *title, int prefer_self);
 static void prof_func_line(FILE *fd, int count, proftime_T *total, proftime_T *self, int prefer_self);
-static int
-# ifdef __BORLANDC__
-    _RTLENTRYF
-# endif
-	prof_total_cmp(const void *s1, const void *s2);
-static int
-# ifdef __BORLANDC__
-    _RTLENTRYF
-# endif
-	prof_self_cmp(const void *s1, const void *s2);
+static int prof_total_cmp(const void *s1, const void *s2);
+static int prof_self_cmp(const void *s1, const void *s2);
 #endif
 static void funccal_unref(funccall_T *fc, ufunc_T *fp, int force);
 
@@ -2794,9 +2786,6 @@
  * Compare function for total time sorting.
  */
     static int
-#ifdef __BORLANDC__
-_RTLENTRYF
-#endif
 prof_total_cmp(const void *s1, const void *s2)
 {
     ufunc_T	*p1, *p2;
@@ -2810,9 +2799,6 @@
  * Compare function for self time sorting.
  */
     static int
-#ifdef __BORLANDC__
-_RTLENTRYF
-#endif
 prof_self_cmp(const void *s1, const void *s2)
 {
     ufunc_T	*p1, *p2;
diff --git a/src/version.c b/src/version.c
index 182a43a..3b9ef32 100644
--- a/src/version.c
+++ b/src/version.c
@@ -768,6 +768,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1306,
+/**/
     1305,
 /**/
     1304,
diff --git a/src/vim.h b/src/vim.h
index 2c9149b..05ad07f 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -17,24 +17,6 @@
 # define MSWIN
 #endif
 
-// use fastcall for Borland, when compiling for MS-Windows
-#if defined(__BORLANDC__) && defined(MSWIN) && !defined(DEBUG)
-#if defined(FEAT_PERL) || \
-    defined(FEAT_PYTHON) || \
-    defined(FEAT_PYTHON3) || \
-    defined(FEAT_RUBY) || \
-    defined(FEAT_TCL) || \
-    defined(FEAT_MZSCHEME) || \
-    defined(DYNAMIC_GETTEXT) || \
-    defined(DYNAMIC_ICONV) || \
-    defined(DYNAMIC_IME) || \
-    defined(XPM)
-  #pragma option -pc
-# else
-  #pragma option -pr
-# endif
-#endif
-
 #ifdef MSWIN
 # include "vimio.h"
 #endif
@@ -2163,11 +2145,6 @@
 # define BROWSE_DIR 2	    /* flag for do_browse() */
 #endif
 
-/* stop using fastcall for Borland */
-#if defined(__BORLANDC__) && defined(MSWIN) && !defined(DEBUG)
- #pragma option -p.
-#endif
-
 #ifdef _MSC_VER
 /* Avoid useless warning "conversion from X to Y of greater size". */
  #pragma warning(disable : 4312)
@@ -2344,9 +2321,6 @@
 # undef FF
 # undef OP_DELETE
 # undef OP_JOIN
-# ifdef __BORLANDC__
-#  define NOPROTO 1
-# endif
   /* remove MAX and MIN, included by glib.h, redefined by sys/param.h */
 # ifdef MAX
 #  undef MAX
@@ -2374,10 +2348,6 @@
 #  undef bool
 # endif
 
-# ifdef __BORLANDC__
-  /* Borland has the structure stati64 but not _stati64 */
-#  define _stati64 stati64
-# endif
 #endif
 
 /* values for vim_handle_signal() that are not a signal */
diff --git a/src/vim.rc b/src/vim.rc
index 195536c..726cb96 100644
--- a/src/vim.rc
+++ b/src/vim.rc
@@ -12,11 +12,7 @@
 #include <winver.h>
 #include "version.h"
 #include "gui_w32_rc.h"
-// #if defined(__BORLANDC__) || defined(__CYGWIN32__) || defined(__MINGW32__)
-# include <winresrc.h>
-// #else
-// # include <winres.h>
-// #endif
+#include <winresrc.h>
 
 //
 // Icons
diff --git a/src/vimrun.c b/src/vimrun.c
index 13efd91..ece20f8 100644
--- a/src/vimrun.c
+++ b/src/vimrun.c
@@ -23,11 +23,6 @@
 #endif
 #include <windows.h>
 
-#ifdef __BORLANDC__
-# define _kbhit kbhit
-# define _getch getch
-#endif
-
     int
 main(void)
 {
diff --git a/src/xxd/Make_bc5.mak b/src/xxd/Make_bc5.mak
deleted file mode 100644
index 4f44622..0000000
--- a/src/xxd/Make_bc5.mak
+++ /dev/null
@@ -1,18 +0,0 @@
-# The most simplistic Makefile for Win32 (NT and Windows 95).
-# Used for Borland C++.
-
-!if ("$(BOR)"=="")
-BOR = c:\bc5
-!endif
-!if ("$(BCC)"=="")
-BCC = bcc32
-!endif
-
-xxd: xxd.exe
-
-xxd.exe: xxd.c
-	$(BCC) -I$(BOR)\include -L$(BOR)\lib -DWIN32 xxd.c $(BOR)\lib\wildargs.obj
-
-clean:
-	- del xxd.obj
-	- del xxd.exe
diff --git a/src/xxd/xxd.c b/src/xxd/xxd.c
index b9f6041..f2192cf 100644
--- a/src/xxd/xxd.c
+++ b/src/xxd/xxd.c
@@ -81,7 +81,7 @@
 #else
 # include <fcntl.h>
 #endif
-#if defined(WIN32) || defined(__BORLANDC__) || defined(CYGWIN)
+#if defined(WIN32) || defined(CYGWIN)
 # include <io.h>	/* for setmode() */
 #else
 # ifdef UNIX
@@ -96,12 +96,6 @@
 # include <unix.h>	/* for fdopen() on MAC */
 #endif
 
-#if defined(__BORLANDC__) && __BORLANDC__ <= 0x0410 && !defined(fileno)
-/* Missing define and prototype grabbed from the BC 4.0 <stdio.h> */
-# define fileno(f)       ((f)->fd)
-FILE   _FAR *_Cdecl _FARFUNC fdopen(int __handle, char _FAR *__type);
-#endif
-
 
 /*  This corrects the problem of missing prototypes for certain functions
  *  in some GNU installations (e.g. SunOS 4.1.x).
@@ -190,7 +184,7 @@
 #endif
 
 #ifndef __P
-# if defined(__STDC__) || defined(WIN32) || defined(__BORLANDC__)
+# if defined(__STDC__) || defined(WIN32)
 #  define __P(a) a
 # else
 #  define __P(a) ()
