diff --git a/.gitignore b/.gitignore
index 5767bae..188636c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -43,14 +43,6 @@
 runtime/doc/uganda.nsis.txt
 nsis/icons/*
 
-# Borland C++
-bcc.cfg
-*.ilc
-*.ild
-*.ilf
-*.ils
-*.tds
-
 # NetBeans
 nbproject/*
 
diff --git a/.hgignore b/.hgignore
index 8b5c5ed..a48b3b9 100644
--- a/.hgignore
+++ b/.hgignore
@@ -45,14 +45,6 @@
 runtime/doc/uganda.nsis.txt
 nsis/icons/*
 
-# Borland C++
-bcc.cfg
-*.ilc
-*.ild
-*.ilf
-*.ils
-*.tds
-
 # NetBeans
 nbproject/*
 
diff --git a/Filelist b/Filelist
index 046a9a7..4f73cc7 100644
--- a/Filelist
+++ b/Filelist
@@ -421,7 +421,6 @@
 		src/GvimExt/uninst.bat \
 		README_srcdos.txt \
 		src/INSTALLpc.txt \
-		src/Make_bc5.mak \
 		src/Make_cyg.mak \
 		src/Make_cyg_ming.mak \
 		src/Make_ming.mak \
@@ -474,7 +473,6 @@
 		src/xpm_w32.c \
 		src/xpm_w32.h \
 		src/tee/Make_mvc.mak \
-		src/xxd/Make_bc5.mak \
 		src/xxd/Make_ming.mak \
 		src/xxd/Make_mvc.mak \
 		nsis/gvim.nsi \
diff --git a/runtime/doc/debug.txt b/runtime/doc/debug.txt
index 37a5772..4564565 100644
--- a/runtime/doc/debug.txt
+++ b/runtime/doc/debug.txt
@@ -80,9 +80,8 @@
 
 If you have Visual Studio, use that instead of the VC Toolkit and WinDbg.
 
-For other compilers, you should always use the corresponding debugger: TD for
-a Vim executable compiled with the Borland compiler; gdb (see above
-|debug-gcc|) for the Cygwin and MinGW compilers.
+For other compilers, you should always use the corresponding debugger: gdb
+(see above |debug-gcc|) for the Cygwin and MinGW compilers.
 
 
 								*debug-vs2005*
diff --git a/runtime/doc/develop.txt b/runtime/doc/develop.txt
index 2d0cc22..9c7867c 100644
--- a/runtime/doc/develop.txt
+++ b/runtime/doc/develop.txt
@@ -278,7 +278,6 @@
 index		shadows global declaration
 time		shadows global declaration
 new		C++ reserved keyword
-try		Borland C++ doesn't like it to be used as a variable.
 
 clear		Mac curses.h
 echo		Mac curses.h
diff --git a/runtime/doc/usr_90.txt b/runtime/doc/usr_90.txt
index a5b4292..087de8f 100644
--- a/runtime/doc/usr_90.txt
+++ b/runtime/doc/usr_90.txt
@@ -281,9 +281,8 @@
 In case you are not satisfied with the features included in the supplied
 binaries, you could try compiling Vim yourself.  Get the source archive from
 the same location as where the binaries are.  You need a compiler for which a
-makefile exists.  Microsoft Visual C works, but is expensive.  The Free
-Borland command-line compiler 5.5 can be used, as well as the free MingW and
-Cygwin compilers.  Check the file src/INSTALLpc.txt for hints.
+makefile exists.  Microsoft Visual C works, but is expensive.  The free MinGW
+and Cygwin compilers can be used.  Check the file src/INSTALLpc.txt for hints.
 
 ==============================================================================
 *90.3*	Upgrading
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) ()
