+/* Capsule summary of different preprocessor flags:
+
+1. Keep in mind that there are two possible OS environments we are dealing
+ with -- Cygwin and Native Windows. Cygwin provides a POSIX emulation
+ layer on top of MS Windows -- in particular, providing the file-system,
+ process, tty, and signal semantics that are part of a modern, standard
+ Unix operating system. MS Windows also provides these services, but
+ through their own API, called Win32. When compiling in a Cygwin
+ environment, the Win32 API's are also available, and in fact are used
+ to do native GUI programming.
+
+2. There are two windowing environments we can target XEmacs for when
+ running under MS Windows -- Windows native, and X. (It may seem strange
+ to write an X application under Windows, but there are in fact many X
+ servers out there running on Windows, and as far as I know there is no
+ real (or at least, that works well) networking Window-system extension
+ under MS Windows. Furthermore, if you're porting a Unix application to
+ Windows and use Cygwin to assist you, it might seem natural to use an
+ X server to avoid having to port all the code to Windows.) For XEmacs,
+ there are various reasons people could come up with for why we would
+ want to keep maintaining X Windows under MS Windows support.
+
+That gives us four possible build environments. I (Ben) build
+regularly on fully-native-everything, Andy builds on Cygwin + MS
+Windows + X Windows for windowing.
+
+The build flags used for these divisions are:
+
+CYGWIN -- for Cygwin-only stuff.
+WIN32_NATIVE -- Win32 native OS-level stuff (files, process, etc.).
+HAVE_X_WINDOWS -- for X Windows (regardless of whether under MS Win)
+HAVE_MS_WINDOWS -- MS Windows native windowing system (anything related to
+ the appearance of the graphical screen).
+
+Finally, there's also the MINGW build environment, which uses GCC
+\(similar to Cygwin), but native MS Windows libraries rather than a
+POSIX emulation layer (the Cygwin approach). This environment defines
+WIN32_NATIVE, but also defines MINGW, which is used mostly because
+uses its own include files (related to Cygwin), which have a few
+things messed up.
+
+
+Formerly, we had a whole host of flags. Here's the conversion, for porting
+code from GNU Emacs and such:
+
+
+WINDOWSNT -> WIN32_NATIVE
+WIN32 -> WIN32_NATIVE
+_WIN32 -> WIN32_NATIVE
+HAVE_WIN32 -> WIN32_NATIVE
+DOS_NT -> WIN32_NATIVE
+HAVE_NTGUI -> WIN32_NATIVE, unless it ends up already bracketed by this
+HAVE_FACES -> always true
+MSDOS -> determine whether this code is really specific to MS-DOS (and not
+ Windows -- e.g. DJGPP code); if so, delete the code; otherwise,
+ convert to WIN32_NATIVE (we do not support MS-DOS w/DOS Extender
+ under XEmacs)
+
+__CYGWIN__ -> CYGWIN
+__CYGWIN32__ -> CYGWIN
+__MINGW32__ -> MINGW
+
+*/
+
+/* Identify ourselves */
+#ifndef WIN32_NATIVE
+#define WIN32_NATIVE