view src/msvc-ncurses-1.patch @ 4654:b9e4ebcad82f

disable doc extraction for optim package Disable the rules for extracting doc strings because they don't work when cross compiling. Our patches to the source files don't touch the doc strings, so there is no need to update them anyway.
author John W. Eaton <jwe@octave.org>
date Tue, 10 Apr 2018 07:50:10 -0400
parents 21f598a028ec
children
line wrap: on
line source

diff -ur ncurses-5.9-orig/c++/Makefile.in ncurses-5.9/c++/Makefile.in
--- ncurses-5.9-orig/c++/Makefile.in	2010-11-27 16:45:27 -0500
+++ ncurses-5.9/c++/Makefile.in	2013-07-04 18:38:36 -0400
@@ -76,7 +76,7 @@
 CXXLIBS		= @CXXLIBS@
 
 INCDIR		= ../include
-CPPFLAGS	= -I../c++ -I$(INCDIR) -I$(srcdir) -DHAVE_CONFIG_H @CPPFLAGS@
+CPPFLAGS	= -I../c++ -I$(INCDIR) -I$(srcdir) -DHAVE_CONFIG_H -DNCURSESXX_DLL @CPPFLAGS@
 
 CTAGS		= @CTAGS@
 ETAGS		= @ETAGS@
@@ -166,7 +166,7 @@
 	$(RANLIB) $@
 
 ../lib/$(LIBNAME_LIBTOOL) : $(LIB_OBJS)
-	cd ../lib && $(LIBTOOL_LINK) $(CXX) $(CXXFLAGS) \
+	cd ../lib && $(LIBTOOL_LINK) $(CXX) -shared $(CXXFLAGS) \
 		-o $(LIBNAME) $(LIB_OBJS:$o=.lo) \
 		-rpath $(INSTALL_PREFIX)$(libdir) \
 		$(LIBTOOL_VERSION) $(NCURSES_MAJOR):$(NCURSES_MINOR) $(LT_UNDEF) $(SHLIB_LIST)
@@ -179,7 +179,7 @@
 demo$x:	$(OBJS_DEMO) \
 	$(MY_LIBRARY)  \
 	@TEST_DEPS@
-	@ECHO_LINK@ $(LINK) -o $@ $(OBJS_DEMO) $(LDFLAGS_DEFAULT)
+	@ECHO_LINK@ $(LINK) -o $@ $(OBJS_DEMO) $(LDFLAGS_DEFAULT) -Wl,-subsystem:console
 
 etip.h:	$(srcdir)/etip.h.in $(srcdir)/edit_cfg.sh
 	cp $(srcdir)/etip.h.in $@
@@ -243,6 +243,8 @@
 $(INCDIR)/panel.h :
 	cd ../panel && $(MAKE) $@
 
+../obj_lo/demo$o: CPPFLAGS := $(filter-out -DNCURSESXX_DLL,$(CPPFLAGS))
+
 ###############################################################################
 # The remainder of this file is automatically generated during configuration
 ###############################################################################
diff -ur ncurses-5.9-orig/c++/cursesapp.h ncurses-5.9/c++/cursesapp.h
--- ncurses-5.9-orig/c++/cursesapp.h	2005-05-28 17:57:44 -0400
+++ ncurses-5.9/c++/cursesapp.h	2013-07-04 18:38:36 -0400
@@ -38,7 +38,7 @@
 
 #include <cursslk.h>
 
-class NCURSES_IMPEXP NCursesApplication {
+class NCURSESXX_IMPEXP NCursesApplication {
 public:
   typedef struct _slk_link {          // This structure is used to maintain
     struct _slk_link* prev;           // a stack of SLKs
diff -ur ncurses-5.9-orig/c++/cursesf.h ncurses-5.9/c++/cursesf.h
--- ncurses-5.9-orig/c++/cursesf.h	2005-08-13 14:08:24 -0400
+++ ncurses-5.9/c++/cursesf.h	2013-07-04 18:38:36 -0400
@@ -50,11 +50,11 @@
 // The abstract base class for buitin and user defined Fieldtypes.
 // -------------------------------------------------------------------------
 //
-class NCURSES_IMPEXP NCursesFormField; // forward declaration
+class NCURSESXX_IMPEXP NCursesFormField; // forward declaration
 
 // Class to represent builtin field types as well as C++ written new
 // fieldtypes (see classes UserDefineFieldType...
-class NCURSES_IMPEXP NCursesFieldType
+class NCURSESXX_IMPEXP NCursesFieldType
 {
   friend class NCursesFormField;
 
@@ -100,7 +100,7 @@
 // The class representing a forms field, wrapping the lowlevel FIELD struct
 // -------------------------------------------------------------------------
 //
-class NCURSES_IMPEXP NCursesFormField
+class NCURSESXX_IMPEXP NCursesFormField
 {
   friend class NCursesForm;
 
@@ -337,7 +337,7 @@
 // The class representing a form, wrapping the lowlevel FORM struct
 // -------------------------------------------------------------------------
 //
-class NCURSES_IMPEXP NCursesForm : public NCursesPanel
+class NCURSESXX_IMPEXP NCursesForm : public NCursesPanel
 {
 protected:
   FORM* form;  // the lowlevel structure
@@ -628,7 +628,7 @@
 // data belongs to some class T. Use T as template argument
 // to create a UserField.
 // -------------------------------------------------------------------------
-template<class T> class NCURSES_IMPEXP NCursesUserField : public NCursesFormField
+template<class T> class NCURSESXX_IMPEXP NCursesUserField : public NCursesFormField
 {
 public:
   NCursesUserField (int rows,
@@ -661,7 +661,7 @@
 // The same mechanism is used to attach user data to a form
 // -------------------------------------------------------------------------
 //
-template<class T> class NCURSES_IMPEXP NCursesUserForm : public NCursesForm
+template<class T> class NCURSESXX_IMPEXP NCursesUserForm : public NCursesForm
 {
 protected:
   // 'Internal' constructor, builds an object without association to a
@@ -718,7 +718,7 @@
 // Builtin Fieldtypes
 // -------------------------------------------------------------------------
 //
-class NCURSES_IMPEXP Alpha_Field : public NCursesFieldType
+class NCURSESXX_IMPEXP Alpha_Field : public NCursesFieldType
 {
 private:
   int min_field_width;
@@ -734,7 +734,7 @@
   }
 };
 
-class NCURSES_IMPEXP Alphanumeric_Field : public NCursesFieldType
+class NCURSESXX_IMPEXP Alphanumeric_Field : public NCursesFieldType
 {
 private:
   int min_field_width;
@@ -750,7 +750,7 @@
   }
 };
 
-class NCURSES_IMPEXP Integer_Field : public NCursesFieldType
+class NCURSESXX_IMPEXP Integer_Field : public NCursesFieldType
 {
 private:
   int precision;
@@ -768,7 +768,7 @@
   }
 };
 
-class NCURSES_IMPEXP Numeric_Field : public NCursesFieldType
+class NCURSESXX_IMPEXP Numeric_Field : public NCursesFieldType
 {
 private:
   int precision;
@@ -786,7 +786,7 @@
   }
 };
 
-class NCURSES_IMPEXP Regular_Expression_Field : public NCursesFieldType
+class NCURSESXX_IMPEXP Regular_Expression_Field : public NCursesFieldType
 {
 private:
   char* regex;
@@ -831,7 +831,7 @@
   }
 };
 
-class NCURSES_IMPEXP Enumeration_Field : public NCursesFieldType
+class NCURSESXX_IMPEXP Enumeration_Field : public NCursesFieldType
 {
 private:
   const char** list;
@@ -870,7 +870,7 @@
   }
 };
 
-class NCURSES_IMPEXP IPV4_Address_Field : public NCursesFieldType
+class NCURSESXX_IMPEXP IPV4_Address_Field : public NCursesFieldType
 {
 private:
   void set(NCursesFormField& f) {
@@ -893,7 +893,7 @@
 // Abstract base class for User-Defined Fieldtypes
 // -------------------------------------------------------------------------
 //
-class NCURSES_IMPEXP UserDefinedFieldType : public NCursesFieldType
+class NCURSESXX_IMPEXP UserDefinedFieldType : public NCursesFieldType
 {
   friend class UDF_Init; // Internal helper to set up statics
 private:
@@ -936,7 +936,7 @@
 // Abstract base class for User-Defined Fieldtypes with Choice functions
 // -------------------------------------------------------------------------
 //
-class NCURSES_IMPEXP UserDefinedFieldType_With_Choice : public UserDefinedFieldType
+class NCURSESXX_IMPEXP UserDefinedFieldType_With_Choice : public UserDefinedFieldType
 {
   friend class UDF_Init; // Internal helper to set up statics
 private:
diff -ur ncurses-5.9-orig/c++/cursesm.cc ncurses-5.9/c++/cursesm.cc
--- ncurses-5.9-orig/c++/cursesm.cc	2005-04-02 16:39:05 -0400
+++ ncurses-5.9/c++/cursesm.cc	2013-07-04 18:38:58 -0400
@@ -180,8 +180,8 @@
   UserHook* hook = reinterpret_cast<UserHook*>(::menu_userptr(menu));
   delete hook;
   if (b_sub_owner) {
-    delete sub;
     ::set_menu_sub(menu, static_cast<WINDOW *>(0));
+    delete sub;
   }
   if (menu) {
     ITEM** itms = ::menu_items(menu);
diff -ur ncurses-5.9-orig/c++/cursesm.h ncurses-5.9/c++/cursesm.h
--- ncurses-5.9-orig/c++/cursesm.h	2005-08-13 14:10:36 -0400
+++ ncurses-5.9/c++/cursesm.h	2013-07-04 18:38:36 -0400
@@ -46,7 +46,7 @@
 // This wraps the ITEM type of <menu.h>
 // -------------------------------------------------------------------------
 //
-class NCURSES_IMPEXP NCursesMenuItem
+class NCURSESXX_IMPEXP NCursesMenuItem
 {
   friend class NCursesMenu;
 
@@ -151,7 +151,7 @@
 // If you don't like to create a child class for individual items to
 // overload action(), you may use this class and provide a callback
 // function pointer for items.
-class NCURSES_IMPEXP NCursesMenuCallbackItem : public NCursesMenuItem
+class NCURSESXX_IMPEXP NCursesMenuCallbackItem : public NCursesMenuItem
 {
 private:
   ITEMCALLBACK* p_fct;
@@ -198,7 +198,7 @@
 // This wraps the MENU type of <menu.h>
 // -------------------------------------------------------------------------
 //
-class NCURSES_IMPEXP NCursesMenu : public NCursesPanel
+class NCURSESXX_IMPEXP NCursesMenu : public NCursesPanel
 {
 protected:
   MENU *menu;
@@ -594,7 +594,7 @@
 // to create a UserItem.
 // -------------------------------------------------------------------------
 //
-template<class T> class NCURSES_IMPEXP NCursesUserItem : public NCursesMenuItem
+template<class T> class NCursesUserItem : public NCursesMenuItem
 {
 public:
   NCursesUserItem (const char* p_name,
@@ -621,7 +621,7 @@
 // The same mechanism is used to attach user data to a menu
 // -------------------------------------------------------------------------
 //
-template<class T> class NCURSES_IMPEXP NCursesUserMenu : public NCursesMenu
+template<class T> class NCursesUserMenu : public NCursesMenu
 {
 protected:
   NCursesUserMenu( int  nlines,
diff -ur ncurses-5.9-orig/c++/cursesp.h ncurses-5.9/c++/cursesp.h
--- ncurses-5.9-orig/c++/cursesp.h	2008-08-16 13:20:23 -0400
+++ ncurses-5.9/c++/cursesp.h	2013-07-04 18:38:36 -0400
@@ -42,7 +42,7 @@
 #  include <panel.h>
 }
 
-class NCURSES_IMPEXP NCursesPanel
+class NCURSESXX_IMPEXP NCursesPanel
   : public NCursesWindow
 {
 protected:
diff -ur ncurses-5.9-orig/c++/cursesw.h ncurses-5.9/c++/cursesw.h
--- ncurses-5.9-orig/c++/cursesw.h	2008-01-19 16:09:10 -0500
+++ ncurses-5.9/c++/cursesw.h	2013-07-04 18:38:36 -0400
@@ -750,7 +750,7 @@
 extern "C" int     _nc_xx_ripoff_init(WINDOW *, int);
 extern "C" int     _nc_has_mouse(void);
 
-class NCURSES_IMPEXP NCursesWindow
+class NCURSESXX_IMPEXP NCursesWindow
 {
   friend class NCursesMenu;
   friend class NCursesForm;
@@ -1364,7 +1364,7 @@
 // -------------------------------------------------------------------------
 // We leave this here for compatibility reasons.
 // -------------------------------------------------------------------------
-class NCURSES_IMPEXP NCursesColorWindow : public NCursesWindow
+class NCURSESXX_IMPEXP NCursesColorWindow : public NCursesWindow
 {
 public:
   NCursesColorWindow(WINDOW* &window)   // useful only for stdscr
@@ -1410,7 +1410,7 @@
 // Pad Support. We allow an association of a pad with a "real" window
 // through which the pad may be viewed.
 // -------------------------------------------------------------------------
-class NCURSES_IMPEXP NCursesPad : public NCursesWindow
+class NCURSESXX_IMPEXP NCursesPad : public NCursesWindow
 {
 private:
   NCursesWindow* viewWin;       // the "viewport" window
@@ -1523,7 +1523,7 @@
 // A FramedPad is constructed always with a viewport window. This viewport
 // will be framed (by a box() command) and the interior of the box is the
 // viewport subwindow. On the frame we display scrollbar sliders.
-class NCURSES_IMPEXP NCursesFramedPad : public NCursesPad
+class NCURSESXX_IMPEXP NCursesFramedPad : public NCursesPad
 {
 protected:
   virtual void OnOperation(int pad_req);
diff -ur ncurses-5.9-orig/c++/cursslk.h ncurses-5.9/c++/cursslk.h
--- ncurses-5.9-orig/c++/cursslk.h	2005-05-28 17:58:18 -0400
+++ ncurses-5.9/c++/cursslk.h	2013-07-04 18:38:36 -0400
@@ -38,10 +38,10 @@
 
 #include <cursesw.h>
 
-class NCURSES_IMPEXP Soft_Label_Key_Set {
+class NCURSESXX_IMPEXP Soft_Label_Key_Set {
 public:
   // This inner class represents the attributes of a Soft Label Key (SLK)
-  class NCURSES_IMPEXP Soft_Label_Key {
+  class NCURSESXX_IMPEXP Soft_Label_Key {
     friend class Soft_Label_Key_Set;
   public:
     typedef enum { Left=0, Center=1, Right=2 } Justification;
@@ -100,10 +100,10 @@
   } Label_Layout;
 
 private:
-  static long NCURSES_IMPEXP count;               // Number of Key Sets
-  static Label_Layout NCURSES_IMPEXP  format;     // Layout of the Key Sets
-  static int  NCURSES_IMPEXP num_labels;          // Number Of Labels in Key Sets
-  bool NCURSES_IMPEXP b_attrInit;                 // Are attributes initialized
+  static long count;               // Number of Key Sets
+  static Label_Layout format;     // Layout of the Key Sets
+  static int num_labels;          // Number Of Labels in Key Sets
+  bool b_attrInit;                 // Are attributes initialized
 
   Soft_Label_Key *slk_array;       // The array of SLK's
 
@@ -143,7 +143,7 @@
 
   // This constructor assumes, that you already constructed a Key Set
   // with a layout by the constructor above. This layout will be reused.
-  NCURSES_IMPEXP Soft_Label_Key_Set();
+  Soft_Label_Key_Set();
 
   Soft_Label_Key_Set& operator=(const Soft_Label_Key_Set& rhs)
   {
@@ -164,7 +164,7 @@
   virtual ~Soft_Label_Key_Set();
 
   // Get Label# i. Label counting starts with 1!
-  NCURSES_IMPEXP Soft_Label_Key& operator[](int i);
+  Soft_Label_Key& operator[](int i);
 
   // Retrieve number of Labels
   inline int labels() const { return num_labels; }
diff -ur ncurses-5.9-orig/c++/demo.cc ncurses-5.9/c++/demo.cc
--- ncurses-5.9-orig/c++/demo.cc	2008-12-06 21:07:34 -0500
+++ ncurses-5.9/c++/demo.cc	2013-07-04 18:38:36 -0400
@@ -43,11 +43,11 @@
 #include "cursesm.h"
 #include "cursesf.h"
 
-#ifdef __MINGW32__
+#if defined(__MINGW32__) || defined(_MSC_VER)
 #undef KEY_EVENT
 #endif
 
-#ifndef __MINGW32__
+#if !defined(__MINGW32__) && !defined(_MSC_VER)
 extern "C" unsigned int sleep(unsigned int);
 #endif
 
@@ -186,7 +186,7 @@
 };
 
 template class MyAction<UserData>;
-template class NCURSES_IMPEXP NCursesUserItem<UserData>;
+template class NCursesUserItem<UserData>;
 
 class QuitItem : public NCursesMenuItem
 {
diff -ur ncurses-5.9-orig/c++/etip.h.in ncurses-5.9/c++/etip.h.in
--- ncurses-5.9-orig/c++/etip.h.in	2008-08-30 15:27:32 -0400
+++ ncurses-5.9/c++/etip.h.in	2013-07-04 18:38:36 -0400
@@ -139,11 +139,11 @@
 #endif
 
 // Forward Declarations
-class NCURSES_IMPEXP NCursesPanel;
-class NCURSES_IMPEXP NCursesMenu;
-class NCURSES_IMPEXP NCursesForm;
+class NCURSESXX_IMPEXP NCursesPanel;
+class NCURSESXX_IMPEXP NCursesMenu;
+class NCURSESXX_IMPEXP NCursesForm;
 
-class NCURSES_IMPEXP NCursesException
+class NCURSESXX_IMPEXP NCursesException
 {
 public:
   const char *message;
@@ -177,7 +177,7 @@
   }
 };
 
-class NCURSES_IMPEXP NCursesPanelException : public NCursesException
+class NCURSESXX_IMPEXP NCursesPanelException : public NCursesException
 {
 public:
   const NCursesPanel* p;
@@ -228,7 +228,7 @@
   }
 };
 
-class NCURSES_IMPEXP NCursesMenuException : public NCursesException
+class NCURSESXX_IMPEXP NCursesMenuException : public NCursesException
 {
 public:
   const NCursesMenu* m;
@@ -279,7 +279,7 @@
   }
 };
 
-class NCURSES_IMPEXP NCursesFormException : public NCursesException
+class NCURSESXX_IMPEXP NCursesFormException : public NCursesException
 {
 public:
   const NCursesForm* f;
@@ -340,7 +340,9 @@
 #  else
 #     include <iostream.h>
 #  endif
-   extern "C" void exit(int);
+#  ifndef _MSC_VER
+     extern "C" void exit(int);
+#  endif
 #endif
 
 inline void THROW(const NCursesException *e) {
diff -ur ncurses-5.9-orig/c++/internal.h ncurses-5.9/c++/internal.h
--- ncurses-5.9-orig/c++/internal.h	2008-12-06 21:07:34 -0500
+++ ncurses-5.9/c++/internal.h	2013-07-04 18:38:36 -0400
@@ -44,7 +44,7 @@
 #define MODULE_ID(id) /*nothing*/
 #endif
 
-#ifdef __MINGW32__
+#if defined(__MINGW32__) || defined(_MSC_VER)
 #include <nc_mingw.h>
 #undef KEY_EVENT
 #endif
diff -ur ncurses-5.9-orig/form/Makefile.in ncurses-5.9/form/Makefile.in
--- ncurses-5.9-orig/form/Makefile.in	2010-11-27 16:45:27 -0500
+++ ncurses-5.9/form/Makefile.in	2013-07-04 18:38:36 -0400
@@ -84,7 +84,7 @@
 CPP		= @CPP@
 CFLAGS		= @CFLAGS@
 
-CPPFLAGS	= -I@top_srcdir@/ncurses -DHAVE_CONFIG_H @CPPFLAGS@
+CPPFLAGS	= -I@top_srcdir@/ncurses -DHAVE_CONFIG_H -DNCFORM_DLL @CPPFLAGS@
 
 CCFLAGS		= $(CPPFLAGS) $(CFLAGS)
 
diff -ur ncurses-5.9-orig/form/f_trace.c ncurses-5.9/form/f_trace.c
--- ncurses-5.9-orig/form/f_trace.c	2010-01-23 16:14:36 -0500
+++ ncurses-5.9/form/f_trace.c	2013-07-04 18:38:36 -0400
@@ -34,35 +34,35 @@
 
 MODULE_ID("$Id: f_trace.c,v 1.2 2010/01/23 21:14:36 tom Exp $")
 
-NCURSES_EXPORT(FIELD **)
+NCFORM_EXPORT(FIELD **)
 _nc_retrace_field_ptr(FIELD **code)
 {
   T((T_RETURN("%p"), (void *)code));
   return code;
 }
 
-NCURSES_EXPORT(FIELD *)
+NCFORM_EXPORT(FIELD *)
 _nc_retrace_field(FIELD *code)
 {
   T((T_RETURN("%p"), (void *)code));
   return code;
 }
 
-NCURSES_EXPORT(FIELDTYPE *)
+NCFORM_EXPORT(FIELDTYPE *)
 _nc_retrace_field_type(FIELDTYPE *code)
 {
   T((T_RETURN("%p"), (void *)code));
   return code;
 }
 
-NCURSES_EXPORT(FORM *)
+NCFORM_EXPORT(FORM *)
 _nc_retrace_form(FORM *code)
 {
   T((T_RETURN("%p"), (void *)code));
   return code;
 }
 
-NCURSES_EXPORT(Form_Hook)
+NCFORM_EXPORT(Form_Hook)
 _nc_retrace_form_hook(Form_Hook code)
 {
   T((T_RETURN("%p"), code));
diff -ur ncurses-5.9-orig/form/fld_arg.c ncurses-5.9/form/fld_arg.c
--- ncurses-5.9-orig/form/fld_arg.c	2010-01-23 16:14:35 -0500
+++ ncurses-5.9/form/fld_arg.c	2013-07-04 18:38:36 -0400
@@ -60,7 +60,7 @@
 |   Return Values :  E_OK           - success
 |                    E_BAD_ARGUMENT - invalid argument
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 set_fieldtype_arg(FIELDTYPE *typ,
 		  void *(*const make_arg)(va_list *),
 		  void *(*const copy_arg)(const void *),
@@ -88,7 +88,7 @@
 |
 |   Return Values :  Pointer to structure or NULL if none is defined.
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void *)
+NCFORM_EXPORT(void *)
 field_arg(const FIELD *field)
 {
   T((T_CALLED("field_arg(%p)"), (const void *)field));
diff -ur ncurses-5.9-orig/form/fld_attr.c ncurses-5.9/form/fld_attr.c
--- ncurses-5.9-orig/form/fld_attr.c	2010-01-23 16:12:08 -0500
+++ ncurses-5.9/form/fld_attr.c	2013-07-04 18:38:37 -0400
@@ -39,7 +39,7 @@
   --------------------------------------------------------------------------*/
 /* "Template" macro to generate a function to set a fields attribute */
 #define GEN_FIELD_ATTR_SET_FCT( name ) \
-NCURSES_IMPEXP int NCURSES_API set_field_ ## name (FIELD * field, chtype attr)\
+NCFORM_IMPEXP int NCFORM_API set_field_ ## name (FIELD * field, chtype attr)\
 {\
    int res = E_BAD_ARGUMENT;\
    T((T_CALLED("set_field_" #name "(%p,%s)"), field, _traceattr(attr)));\
@@ -64,7 +64,7 @@
 
 /* "Template" macro to generate a function to get a fields attribute */
 #define GEN_FIELD_ATTR_GET_FCT( name ) \
-NCURSES_IMPEXP chtype NCURSES_API field_ ## name (const FIELD * field)\
+NCFORM_IMPEXP chtype NCFORM_API field_ ## name (const FIELD * field)\
 {\
    T((T_CALLED("field_" #name "(%p)"), (const void *) field));\
    returnAttr( A_ATTRIBUTES & (Normalize_Field( field ) -> name) );\
diff -ur ncurses-5.9-orig/form/fld_current.c ncurses-5.9/form/fld_current.c
--- ncurses-5.9-orig/form/fld_current.c	2010-01-23 16:14:35 -0500
+++ ncurses-5.9/form/fld_current.c	2013-07-04 18:38:37 -0400
@@ -47,7 +47,7 @@
 |                    E_INVALID_FIELD   - current field can't be left
 |                    E_SYSTEM_ERROR    - system error
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 set_current_field(FORM *form, FIELD *field)
 {
   int err = E_OK;
@@ -110,7 +110,7 @@
 |
 |   Return Values :  Pointer to the current field.
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(FIELD *)
+NCFORM_EXPORT(FIELD *)
 current_field(const FORM *form)
 {
   T((T_CALLED("current_field(%p)"), (const void *)form));
@@ -127,7 +127,7 @@
 |   Return Values :  >= 0   : field index
 |                    -1     : fieldpointer invalid or field not connected
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 field_index(const FIELD *field)
 {
   T((T_CALLED("field_index(%p)"), (const void *)field));
diff -ur ncurses-5.9-orig/form/fld_def.c ncurses-5.9/form/fld_def.c
--- ncurses-5.9-orig/form/fld_def.c	2010-01-23 16:14:35 -0500
+++ ncurses-5.9/form/fld_def.c	2013-07-04 18:38:37 -0400
@@ -65,7 +65,7 @@
   NCURSES_FIELD_EXTENSION
 };
 
-NCURSES_EXPORT_VAR(FIELD *)
+NCFORM_EXPORT_VAR(FIELD *)
 _nc_Default_Field = &default_field;
 
 /*---------------------------------------------------------------------------
@@ -82,7 +82,7 @@
 |   Return Values :  Pointer to argument structure. Maybe NULL.
 |                    In case of an error in *err an error counter is increased.
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(TypeArgument *)
+NCFORM_EXPORT(TypeArgument *)
 _nc_Make_Argument(const FIELDTYPE *typ, va_list *ap, int *err)
 {
   TypeArgument *res = (TypeArgument *)0;
@@ -130,7 +130,7 @@
 |   Return Values :  Pointer to argument structure. Maybe NULL.
 |                    In case of an error in *err an error counter is increased.
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(TypeArgument *)
+NCFORM_EXPORT(TypeArgument *)
 _nc_Copy_Argument(const FIELDTYPE *typ, const TypeArgument *argp, int *err)
 {
   TypeArgument *res = (TypeArgument *)0;
@@ -179,7 +179,7 @@
 |
 |   Return Values :  -
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void)
+NCFORM_EXPORT(void)
 _nc_Free_Argument(const FIELDTYPE *typ, TypeArgument *argp)
 {
   if (typ != 0 && (typ->status & _HAS_ARGS) != 0)
@@ -210,7 +210,7 @@
 |   Return Values :  TRUE       - copy worked
 |                    FALSE      - error occurred
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(bool)
+NCFORM_EXPORT(bool)
 _nc_Copy_Type(FIELD *dst, FIELD const *src)
 {
   int err = 0;
@@ -245,7 +245,7 @@
 |
 |   Return Values :  -
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void)
+NCFORM_EXPORT(void)
 _nc_Free_Type(FIELD *field)
 {
   assert(field != 0);
@@ -272,7 +272,7 @@
 |
 |   Return Values :  Pointer to the new field or NULL if failure.
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(FIELD *)
+NCFORM_EXPORT(FIELD *)
 new_field(int rows, int cols, int frow, int fcol, int nrow, int nbuf)
 {
   static const FIELD_CELL blank = BLANK;
@@ -352,7 +352,7 @@
 |                    E_BAD_ARGUMENT - invalid field pointer
 |                    E_CONNECTED    - field is connected
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 free_field(FIELD *field)
 {
   T((T_CALLED("free_field(%p)"), (void *)field));
diff -ur ncurses-5.9-orig/form/fld_dup.c ncurses-5.9/form/fld_dup.c
--- ncurses-5.9-orig/form/fld_dup.c	2010-01-23 16:14:35 -0500
+++ ncurses-5.9/form/fld_dup.c	2013-07-04 18:38:37 -0400
@@ -47,7 +47,7 @@
 |
 |   Return Values :  Pointer to the new field or NULL if failure
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(FIELD *)
+NCFORM_EXPORT(FIELD *)
 dup_field(FIELD *field, int frow, int fcol)
 {
   FIELD *New_Field = (FIELD *)0;
diff -ur ncurses-5.9-orig/form/fld_ftchoice.c ncurses-5.9/form/fld_ftchoice.c
--- ncurses-5.9-orig/form/fld_ftchoice.c	2010-01-23 16:14:35 -0500
+++ ncurses-5.9/form/fld_ftchoice.c	2013-07-04 18:38:37 -0400
@@ -46,7 +46,7 @@
 |   Return Values :  E_OK           - success
 |                    E_BAD_ARGUMENT - invalid arguments
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 set_fieldtype_choice(FIELDTYPE *typ,
 		     bool (*const next_choice) (FIELD *, const void *),
 		     bool (*const prev_choice) (FIELD *, const void *))
diff -ur ncurses-5.9-orig/form/fld_ftlink.c ncurses-5.9/form/fld_ftlink.c
--- ncurses-5.9-orig/form/fld_ftlink.c	2010-01-23 16:14:35 -0500
+++ ncurses-5.9/form/fld_ftlink.c	2013-07-04 18:38:37 -0400
@@ -48,7 +48,7 @@
 |
 |   Return Values :  Fieldtype pointer or NULL if error occurred.
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(FIELDTYPE *)
+NCFORM_EXPORT(FIELDTYPE *)
 link_fieldtype(FIELDTYPE *type1, FIELDTYPE *type2)
 {
   FIELDTYPE *nftyp = (FIELDTYPE *)0;
diff -ur ncurses-5.9-orig/form/fld_info.c ncurses-5.9/form/fld_info.c
--- ncurses-5.9-orig/form/fld_info.c	2010-01-23 16:14:35 -0500
+++ ncurses-5.9/form/fld_info.c	2013-07-04 18:38:37 -0400
@@ -46,7 +46,7 @@
 |   Return Values :  E_OK           - success
 |                    E_BAD_ARGUMENT - invalid field pointer
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 field_info(const FIELD *field,
 	   int *rows, int *cols,
 	   int *frow, int *fcol,
@@ -88,7 +88,7 @@
 |   Return Values :  E_OK           - success
 |                    E_BAD_ARGUMENT - invalid argument
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 dynamic_field_info(const FIELD *field, int *drows, int *dcols, int *maxgrow)
 {
   T((T_CALLED("dynamic_field_info(%p,%p,%p,%p)"),
diff -ur ncurses-5.9-orig/form/fld_just.c ncurses-5.9/form/fld_just.c
--- ncurses-5.9-orig/form/fld_just.c	2010-01-23 16:14:35 -0500
+++ ncurses-5.9/form/fld_just.c	2013-07-04 18:38:37 -0400
@@ -44,7 +44,7 @@
 |                    E_BAD_ARGUMENT  - one of the arguments was incorrect
 |                    E_SYSTEM_ERROR  - system error
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 set_field_just(FIELD *field, int just)
 {
   int res = E_BAD_ARGUMENT;
@@ -76,7 +76,7 @@
 |
 |   Return Values :  The justification type.
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 field_just(const FIELD *field)
 {
   T((T_CALLED("field_just(%p)"), (const void *)field));
diff -ur ncurses-5.9-orig/form/fld_link.c ncurses-5.9/form/fld_link.c
--- ncurses-5.9-orig/form/fld_link.c	2010-01-23 16:14:35 -0500
+++ ncurses-5.9/form/fld_link.c	2013-07-04 18:38:37 -0400
@@ -48,7 +48,7 @@
 |
 |   Return Values :  Pointer to the new field or NULL if failure
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(FIELD *)
+NCFORM_EXPORT(FIELD *)
 link_field(FIELD *field, int frow, int fcol)
 {
   FIELD *New_Field = (FIELD *)0;
diff -ur ncurses-5.9-orig/form/fld_max.c ncurses-5.9/form/fld_max.c
--- ncurses-5.9-orig/form/fld_max.c	2010-01-23 16:14:36 -0500
+++ ncurses-5.9/form/fld_max.c	2013-07-04 18:38:37 -0400
@@ -44,7 +44,7 @@
 |   Return Values :  E_OK           - success
 |                    E_BAD_ARGUMENT - invalid argument
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 set_max_field(FIELD *field, int maxgrow)
 {
   T((T_CALLED("set_max_field(%p,%d)"), (void *)field, maxgrow));
diff -ur ncurses-5.9-orig/form/fld_move.c ncurses-5.9/form/fld_move.c
--- ncurses-5.9-orig/form/fld_move.c	2010-01-23 16:14:36 -0500
+++ ncurses-5.9/form/fld_move.c	2013-07-04 18:38:37 -0400
@@ -45,7 +45,7 @@
 |                    E_BAD_ARGUMENT  - invalid argument passed
 |                    E_CONNECTED     - field is connected
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 move_field(FIELD *field, int frow, int fcol)
 {
   T((T_CALLED("move_field(%p,%d,%d)"), (void *)field, frow, fcol));
diff -ur ncurses-5.9-orig/form/fld_newftyp.c ncurses-5.9/form/fld_newftyp.c
--- ncurses-5.9-orig/form/fld_newftyp.c	2010-01-23 16:14:36 -0500
+++ ncurses-5.9/form/fld_newftyp.c	2013-07-04 18:38:37 -0400
@@ -52,7 +52,7 @@
 #endif
 };
 
-NCURSES_EXPORT_VAR(FIELDTYPE *)
+NCFORM_EXPORT_VAR(FIELDTYPE *)
 _nc_Default_FieldType = &default_fieldtype;
 
 /*---------------------------------------------------------------------------
@@ -70,7 +70,7 @@
 |
 |   Return Values :  Fieldtype pointer or NULL if error occurred
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(FIELDTYPE *)
+NCFORM_EXPORT(FIELDTYPE *)
 new_fieldtype(bool (*const field_check) (FIELD *, const void *),
 	      bool (*const char_check) (int, const void *))
 {
@@ -115,7 +115,7 @@
 |                    E_CONNECTED     - there are fields referencing the type
 |                    E_BAD_ARGUMENT  - invalid fieldtype pointer
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 free_fieldtype(FIELDTYPE *typ)
 {
   T((T_CALLED("free_fieldtype(%p)"), (void *)typ));
diff -ur ncurses-5.9-orig/form/fld_opts.c ncurses-5.9/form/fld_opts.c
--- ncurses-5.9-orig/form/fld_opts.c	2010-01-23 16:14:36 -0500
+++ ncurses-5.9/form/fld_opts.c	2013-07-04 18:38:37 -0400
@@ -50,7 +50,7 @@
 |                    E_BAD_ARGUMENT  - invalid options
 |                    E_SYSTEM_ERROR  - system error
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 set_field_opts(FIELD *field, Field_Options opts)
 {
   int res = E_BAD_ARGUMENT;
@@ -71,7 +71,7 @@
 |
 |   Return Values :  The options.
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(Field_Options)
+NCFORM_EXPORT(Field_Options)
 field_opts(const FIELD *field)
 {
   T((T_CALLED("field_opts(%p)"), (const void *)field));
@@ -91,7 +91,7 @@
 |                    E_BAD_ARGUMENT  - invalid options
 |                    E_SYSTEM_ERROR  - system error
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 field_opts_on(FIELD *field, Field_Options opts)
 {
   int res = E_BAD_ARGUMENT;
@@ -119,7 +119,7 @@
 |                    E_BAD_ARGUMENT  - invalid options
 |                    E_SYSTEM_ERROR  - system error
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 field_opts_off(FIELD *field, Field_Options opts)
 {
   int res = E_BAD_ARGUMENT;
diff -ur ncurses-5.9-orig/form/fld_pad.c ncurses-5.9/form/fld_pad.c
--- ncurses-5.9-orig/form/fld_pad.c	2010-01-23 16:14:36 -0500
+++ ncurses-5.9/form/fld_pad.c	2013-07-04 18:38:37 -0400
@@ -45,7 +45,7 @@
 |                    E_BAD_ARGUMENT - invalid field pointer or pad character
 |                    E_SYSTEM_ERROR - system error
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 set_field_pad(FIELD *field, int ch)
 {
   int res = E_BAD_ARGUMENT;
@@ -74,7 +74,7 @@
 |
 |   Return Values :  The pad character.
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 field_pad(const FIELD *field)
 {
   T((T_CALLED("field_pad(%p)"), (const void *)field));
diff -ur ncurses-5.9-orig/form/fld_page.c ncurses-5.9/form/fld_page.c
--- ncurses-5.9-orig/form/fld_page.c	2010-01-23 16:14:36 -0500
+++ ncurses-5.9/form/fld_page.c	2013-07-04 18:38:37 -0400
@@ -44,7 +44,7 @@
 |   Return Values :  E_OK         - success
 |                    E_CONNECTED  - field is connected
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 set_new_page(FIELD *field, bool new_page_flag)
 {
   T((T_CALLED("set_new_page(%p,%d)"), (void *)field, new_page_flag));
@@ -71,7 +71,7 @@
 |   Return Values :  TRUE  - field starts a new page
 |                    FALSE - field doesn't start a new page
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(bool)
+NCFORM_EXPORT(bool)
 new_page(const FIELD *field)
 {
   T((T_CALLED("new_page(%p)"), (const void *)field));
diff -ur ncurses-5.9-orig/form/fld_stat.c ncurses-5.9/form/fld_stat.c
--- ncurses-5.9-orig/form/fld_stat.c	2010-01-23 16:14:36 -0500
+++ ncurses-5.9/form/fld_stat.c	2013-07-04 18:38:37 -0400
@@ -43,7 +43,7 @@
 |
 |   Return Values :  E_OK            - success
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 set_field_status(FIELD *field, bool status)
 {
   T((T_CALLED("set_field_status(%p,%d)"), (void *)field, status));
@@ -68,7 +68,7 @@
 |   Return Values :  TRUE  - buffer has been changed
 |                    FALSE - buffer has not been changed
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(bool)
+NCFORM_EXPORT(bool)
 field_status(const FIELD *field)
 {
   T((T_CALLED("field_status(%p)"), (const void *)field));
diff -ur ncurses-5.9-orig/form/fld_type.c ncurses-5.9/form/fld_type.c
--- ncurses-5.9-orig/form/fld_type.c	2010-01-23 16:14:36 -0500
+++ ncurses-5.9/form/fld_type.c	2013-07-04 18:38:37 -0400
@@ -45,7 +45,7 @@
 |   Return Values :  E_OK           - success
 |                    E_SYSTEM_ERROR - system error
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 set_field_type(FIELD *field, FIELDTYPE *type,...)
 {
   va_list ap;
@@ -87,7 +87,7 @@
 |
 |   Return Values :  Pointer to fieldtype of NULL if none is defined.
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(FIELDTYPE *)
+NCFORM_EXPORT(FIELDTYPE *)
 field_type(const FIELD *field)
 {
   T((T_CALLED("field_type(%p)"), (const void *)field));
diff -ur ncurses-5.9-orig/form/fld_user.c ncurses-5.9/form/fld_user.c
--- ncurses-5.9-orig/form/fld_user.c	2010-01-23 16:14:36 -0500
+++ ncurses-5.9/form/fld_user.c	2013-07-04 18:38:37 -0400
@@ -43,7 +43,7 @@
 |
 |   Return Values :  E_OK         - on success
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 set_field_userptr(FIELD *field, void *usrptr)
 {
   T((T_CALLED("set_field_userptr(%p,%p)"), (void *)field, (void *)usrptr));
@@ -62,7 +62,7 @@
 |   Return Values :  Value of pointer. If no such pointer has been set,
 |                    NULL is returned
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void *)
+NCFORM_EXPORT(void *)
 field_userptr(const FIELD *field)
 {
   T((T_CALLED("field_userptr(%p)"), (const void *)field));
diff -ur ncurses-5.9-orig/form/form.h ncurses-5.9/form/form.h
--- ncurses-5.9-orig/form/form.h	2009-11-07 14:31:11 -0500
+++ ncurses-5.9/form/form.h	2013-07-04 18:38:37 -0400
@@ -287,132 +287,132 @@
 	/*************************
 	*  standard field types  *
 	*************************/
-extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_ALPHA;
-extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_ALNUM;
-extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_ENUM;
-extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_INTEGER;
-extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_NUMERIC;
-extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_REGEXP;
+extern NCFORM_EXPORT_VAR(FIELDTYPE *) TYPE_ALPHA;
+extern NCFORM_EXPORT_VAR(FIELDTYPE *) TYPE_ALNUM;
+extern NCFORM_EXPORT_VAR(FIELDTYPE *) TYPE_ENUM;
+extern NCFORM_EXPORT_VAR(FIELDTYPE *) TYPE_INTEGER;
+extern NCFORM_EXPORT_VAR(FIELDTYPE *) TYPE_NUMERIC;
+extern NCFORM_EXPORT_VAR(FIELDTYPE *) TYPE_REGEXP;
 
 	/************************************
 	*  built-in additional field types  *
 	*  They are not defined in SVr4     *
 	************************************/
-extern NCURSES_EXPORT_VAR(FIELDTYPE *) TYPE_IPV4;      /* Internet IP Version 4 address */
+extern NCFORM_EXPORT_VAR(FIELDTYPE *) TYPE_IPV4;      /* Internet IP Version 4 address */
 
 	/***********************
 	*  FIELDTYPE routines  *
 	***********************/
-extern NCURSES_EXPORT(FIELDTYPE *) new_fieldtype (
+extern NCFORM_EXPORT(FIELDTYPE *) new_fieldtype (
 		    bool (* const field_check)(FIELD *,const void *),
 		    bool (* const char_check)(int,const void *));
-extern NCURSES_EXPORT(FIELDTYPE *) link_fieldtype(
+extern NCFORM_EXPORT(FIELDTYPE *) link_fieldtype(
 		    FIELDTYPE *, FIELDTYPE *);
 
-extern NCURSES_EXPORT(int)	free_fieldtype (FIELDTYPE *);
-extern NCURSES_EXPORT(int)	set_fieldtype_arg (FIELDTYPE *,
+extern NCFORM_EXPORT(int)	free_fieldtype (FIELDTYPE *);
+extern NCFORM_EXPORT(int)	set_fieldtype_arg (FIELDTYPE *,
 		    void * (* const make_arg)(va_list *),
 		    void * (* const copy_arg)(const void *),
 		    void (* const free_arg)(void *));
-extern NCURSES_EXPORT(int)	 set_fieldtype_choice (FIELDTYPE *,
+extern NCFORM_EXPORT(int)	 set_fieldtype_choice (FIELDTYPE *,
 		    bool (* const next_choice)(FIELD *,const void *),
 	      	    bool (* const prev_choice)(FIELD *,const void *));
 
 	/*******************
 	*  FIELD routines  *
 	*******************/
-extern NCURSES_EXPORT(FIELD *)	new_field (int,int,int,int,int,int);
-extern NCURSES_EXPORT(FIELD *)	dup_field (FIELD *,int,int);
-extern NCURSES_EXPORT(FIELD *)	link_field (FIELD *,int,int);
-
-extern NCURSES_EXPORT(int)	free_field (FIELD *);
-extern NCURSES_EXPORT(int)	field_info (const FIELD *,int *,int *,int *,int *,int *,int *);
-extern NCURSES_EXPORT(int)	dynamic_field_info (const FIELD *,int *,int *,int *);
-extern NCURSES_EXPORT(int)	set_max_field ( FIELD *,int);
-extern NCURSES_EXPORT(int)	move_field (FIELD *,int,int);
-extern NCURSES_EXPORT(int)	set_field_type (FIELD *,FIELDTYPE *,...);
-extern NCURSES_EXPORT(int)	set_new_page (FIELD *,bool);
-extern NCURSES_EXPORT(int)	set_field_just (FIELD *,int);
-extern NCURSES_EXPORT(int)	field_just (const FIELD *);
-extern NCURSES_EXPORT(int)	set_field_fore (FIELD *,chtype);
-extern NCURSES_EXPORT(int)	set_field_back (FIELD *,chtype);
-extern NCURSES_EXPORT(int)	set_field_pad (FIELD *,int);
-extern NCURSES_EXPORT(int)	field_pad (const FIELD *);
-extern NCURSES_EXPORT(int)	set_field_buffer (FIELD *,int,const char *);
-extern NCURSES_EXPORT(int)	set_field_status (FIELD *,bool);
-extern NCURSES_EXPORT(int)	set_field_userptr (FIELD *, void *);
-extern NCURSES_EXPORT(int)	set_field_opts (FIELD *,Field_Options);
-extern NCURSES_EXPORT(int)	field_opts_on (FIELD *,Field_Options);
-extern NCURSES_EXPORT(int)	field_opts_off (FIELD *,Field_Options);
-
-extern NCURSES_EXPORT(chtype)	field_fore (const FIELD *);
-extern NCURSES_EXPORT(chtype)	field_back (const FIELD *);
-
-extern NCURSES_EXPORT(bool)	new_page (const FIELD *);
-extern NCURSES_EXPORT(bool)	field_status (const FIELD *);
-
-extern NCURSES_EXPORT(void *)	field_arg (const FIELD *);
+extern NCFORM_EXPORT(FIELD *)	new_field (int,int,int,int,int,int);
+extern NCFORM_EXPORT(FIELD *)	dup_field (FIELD *,int,int);
+extern NCFORM_EXPORT(FIELD *)	link_field (FIELD *,int,int);
+
+extern NCFORM_EXPORT(int)	free_field (FIELD *);
+extern NCFORM_EXPORT(int)	field_info (const FIELD *,int *,int *,int *,int *,int *,int *);
+extern NCFORM_EXPORT(int)	dynamic_field_info (const FIELD *,int *,int *,int *);
+extern NCFORM_EXPORT(int)	set_max_field ( FIELD *,int);
+extern NCFORM_EXPORT(int)	move_field (FIELD *,int,int);
+extern NCFORM_EXPORT(int)	set_field_type (FIELD *,FIELDTYPE *,...);
+extern NCFORM_EXPORT(int)	set_new_page (FIELD *,bool);
+extern NCFORM_EXPORT(int)	set_field_just (FIELD *,int);
+extern NCFORM_EXPORT(int)	field_just (const FIELD *);
+extern NCFORM_EXPORT(int)	set_field_fore (FIELD *,chtype);
+extern NCFORM_EXPORT(int)	set_field_back (FIELD *,chtype);
+extern NCFORM_EXPORT(int)	set_field_pad (FIELD *,int);
+extern NCFORM_EXPORT(int)	field_pad (const FIELD *);
+extern NCFORM_EXPORT(int)	set_field_buffer (FIELD *,int,const char *);
+extern NCFORM_EXPORT(int)	set_field_status (FIELD *,bool);
+extern NCFORM_EXPORT(int)	set_field_userptr (FIELD *, void *);
+extern NCFORM_EXPORT(int)	set_field_opts (FIELD *,Field_Options);
+extern NCFORM_EXPORT(int)	field_opts_on (FIELD *,Field_Options);
+extern NCFORM_EXPORT(int)	field_opts_off (FIELD *,Field_Options);
+
+extern NCFORM_EXPORT(chtype)	field_fore (const FIELD *);
+extern NCFORM_EXPORT(chtype)	field_back (const FIELD *);
+
+extern NCFORM_EXPORT(bool)	new_page (const FIELD *);
+extern NCFORM_EXPORT(bool)	field_status (const FIELD *);
+
+extern NCFORM_EXPORT(void *)	field_arg (const FIELD *);
 
-extern NCURSES_EXPORT(void *)	field_userptr (const FIELD *);
+extern NCFORM_EXPORT(void *)	field_userptr (const FIELD *);
 
-extern NCURSES_EXPORT(FIELDTYPE *)	field_type (const FIELD *);
+extern NCFORM_EXPORT(FIELDTYPE *)	field_type (const FIELD *);
 
-extern NCURSES_EXPORT(char *)	field_buffer (const FIELD *,int);
+extern NCFORM_EXPORT(char *)	field_buffer (const FIELD *,int);
 
-extern NCURSES_EXPORT(Field_Options)	field_opts (const FIELD *);
+extern NCFORM_EXPORT(Field_Options)	field_opts (const FIELD *);
 
 	/******************
 	*  FORM routines  *
 	******************/
 
-extern NCURSES_EXPORT(FORM *)	new_form (FIELD **);
+extern NCFORM_EXPORT(FORM *)	new_form (FIELD **);
 
-extern NCURSES_EXPORT(FIELD **)	form_fields (const FORM *);
-extern NCURSES_EXPORT(FIELD *)	current_field (const FORM *);
+extern NCFORM_EXPORT(FIELD **)	form_fields (const FORM *);
+extern NCFORM_EXPORT(FIELD *)	current_field (const FORM *);
 
-extern NCURSES_EXPORT(WINDOW *)	form_win (const FORM *);
-extern NCURSES_EXPORT(WINDOW *)	form_sub (const FORM *);
+extern NCFORM_EXPORT(WINDOW *)	form_win (const FORM *);
+extern NCFORM_EXPORT(WINDOW *)	form_sub (const FORM *);
 
-extern NCURSES_EXPORT(Form_Hook)	form_init (const FORM *);
-extern NCURSES_EXPORT(Form_Hook)	form_term (const FORM *);
-extern NCURSES_EXPORT(Form_Hook)	field_init (const FORM *);
-extern NCURSES_EXPORT(Form_Hook)	field_term (const FORM *);
-
-extern NCURSES_EXPORT(int)	free_form (FORM *);
-extern NCURSES_EXPORT(int)	set_form_fields (FORM *,FIELD **);
-extern NCURSES_EXPORT(int)	field_count (const FORM *);
-extern NCURSES_EXPORT(int)	set_form_win (FORM *,WINDOW *);
-extern NCURSES_EXPORT(int)	set_form_sub (FORM *,WINDOW *);
-extern NCURSES_EXPORT(int)	set_current_field (FORM *,FIELD *);
-extern NCURSES_EXPORT(int)	field_index (const FIELD *);
-extern NCURSES_EXPORT(int)	set_form_page (FORM *,int);
-extern NCURSES_EXPORT(int)	form_page (const FORM *);
-extern NCURSES_EXPORT(int)	scale_form (const FORM *,int *,int *);
-extern NCURSES_EXPORT(int)	set_form_init (FORM *,Form_Hook);
-extern NCURSES_EXPORT(int)	set_form_term (FORM *,Form_Hook);
-extern NCURSES_EXPORT(int)	set_field_init (FORM *,Form_Hook);
-extern NCURSES_EXPORT(int)	set_field_term (FORM *,Form_Hook);
-extern NCURSES_EXPORT(int)	post_form (FORM *);
-extern NCURSES_EXPORT(int)	unpost_form (FORM *);
-extern NCURSES_EXPORT(int)	pos_form_cursor (FORM *);
-extern NCURSES_EXPORT(int)	form_driver (FORM *,int);
-extern NCURSES_EXPORT(int)	set_form_userptr (FORM *,void *);
-extern NCURSES_EXPORT(int)	set_form_opts (FORM *,Form_Options);
-extern NCURSES_EXPORT(int)	form_opts_on (FORM *,Form_Options);
-extern NCURSES_EXPORT(int)	form_opts_off (FORM *,Form_Options);
-extern NCURSES_EXPORT(int)	form_request_by_name (const char *);
+extern NCFORM_EXPORT(Form_Hook)	form_init (const FORM *);
+extern NCFORM_EXPORT(Form_Hook)	form_term (const FORM *);
+extern NCFORM_EXPORT(Form_Hook)	field_init (const FORM *);
+extern NCFORM_EXPORT(Form_Hook)	field_term (const FORM *);
+
+extern NCFORM_EXPORT(int)	free_form (FORM *);
+extern NCFORM_EXPORT(int)	set_form_fields (FORM *,FIELD **);
+extern NCFORM_EXPORT(int)	field_count (const FORM *);
+extern NCFORM_EXPORT(int)	set_form_win (FORM *,WINDOW *);
+extern NCFORM_EXPORT(int)	set_form_sub (FORM *,WINDOW *);
+extern NCFORM_EXPORT(int)	set_current_field (FORM *,FIELD *);
+extern NCFORM_EXPORT(int)	field_index (const FIELD *);
+extern NCFORM_EXPORT(int)	set_form_page (FORM *,int);
+extern NCFORM_EXPORT(int)	form_page (const FORM *);
+extern NCFORM_EXPORT(int)	scale_form (const FORM *,int *,int *);
+extern NCFORM_EXPORT(int)	set_form_init (FORM *,Form_Hook);
+extern NCFORM_EXPORT(int)	set_form_term (FORM *,Form_Hook);
+extern NCFORM_EXPORT(int)	set_field_init (FORM *,Form_Hook);
+extern NCFORM_EXPORT(int)	set_field_term (FORM *,Form_Hook);
+extern NCFORM_EXPORT(int)	post_form (FORM *);
+extern NCFORM_EXPORT(int)	unpost_form (FORM *);
+extern NCFORM_EXPORT(int)	pos_form_cursor (FORM *);
+extern NCFORM_EXPORT(int)	form_driver (FORM *,int);
+extern NCFORM_EXPORT(int)	set_form_userptr (FORM *,void *);
+extern NCFORM_EXPORT(int)	set_form_opts (FORM *,Form_Options);
+extern NCFORM_EXPORT(int)	form_opts_on (FORM *,Form_Options);
+extern NCFORM_EXPORT(int)	form_opts_off (FORM *,Form_Options);
+extern NCFORM_EXPORT(int)	form_request_by_name (const char *);
 
-extern NCURSES_EXPORT(const char *)	form_request_name (int);
+extern NCFORM_EXPORT(const char *)	form_request_name (int);
 
-extern NCURSES_EXPORT(void *)	form_userptr (const FORM *);
+extern NCFORM_EXPORT(void *)	form_userptr (const FORM *);
 
-extern NCURSES_EXPORT(Form_Options)	form_opts (const FORM *);
+extern NCFORM_EXPORT(Form_Options)	form_opts (const FORM *);
 
-extern NCURSES_EXPORT(bool)	data_ahead (const FORM *);
-extern NCURSES_EXPORT(bool)	data_behind (const FORM *);
+extern NCFORM_EXPORT(bool)	data_ahead (const FORM *);
+extern NCFORM_EXPORT(bool)	data_behind (const FORM *);
 
 #if NCURSES_SP_FUNCS
-extern NCURSES_EXPORT(FORM *)	NCURSES_SP_NAME(new_form) (SCREEN*, FIELD **);
+extern NCFORM_EXPORT(FORM *)	NCURSES_SP_NAME(new_form) (SCREEN*, FIELD **);
 #endif
 
 #ifdef __cplusplus
diff -ur ncurses-5.9-orig/form/form.priv.h ncurses-5.9/form/form.priv.h
--- ncurses-5.9-orig/form/form.priv.h	2009-11-07 16:26:43 -0500
+++ ncurses-5.9/form/form.priv.h	2013-07-04 18:38:37 -0400
@@ -65,9 +65,9 @@
 	/***********************
 	*   Default objects    *
 	***********************/
-extern NCURSES_EXPORT_VAR(FORM *)      _nc_Default_Form;
-extern NCURSES_EXPORT_VAR(FIELD *)     _nc_Default_Field;
-extern NCURSES_EXPORT_VAR(FIELDTYPE *) _nc_Default_FieldType;
+extern NCFORM_EXPORT_VAR(FORM *)      _nc_Default_Form;
+extern NCFORM_EXPORT_VAR(FIELD *)     _nc_Default_Field;
+extern NCFORM_EXPORT_VAR(FIELDTYPE *) _nc_Default_FieldType;
 
 /* form  status values */
 #define _OVLMODE         (0x04U) /* Form is in overlay mode                */
@@ -163,31 +163,31 @@
 
 #define C_ZEROS '\0'
 
-extern NCURSES_EXPORT(TypeArgument *) _nc_Make_Argument (const FIELDTYPE*, va_list*, int*);
-extern NCURSES_EXPORT(TypeArgument *) _nc_Copy_Argument (const FIELDTYPE*, const TypeArgument*, int*);
-extern NCURSES_EXPORT(void) _nc_Free_Argument (const FIELDTYPE*, TypeArgument*);
-extern NCURSES_EXPORT(bool) _nc_Copy_Type (FIELD*, FIELD const *);
-extern NCURSES_EXPORT(void) _nc_Free_Type (FIELD *);
-
-extern NCURSES_EXPORT(int) _nc_Synchronize_Attributes (FIELD*);
-extern NCURSES_EXPORT(int) _nc_Synchronize_Options (FIELD*, Field_Options);
-extern NCURSES_EXPORT(int) _nc_Set_Form_Page (FORM*, int, FIELD*);
-extern NCURSES_EXPORT(int) _nc_Refresh_Current_Field (FORM*);
-extern NCURSES_EXPORT(FIELD *) _nc_First_Active_Field (FORM*);
-extern NCURSES_EXPORT(bool) _nc_Internal_Validation (FORM*);
-extern NCURSES_EXPORT(int) _nc_Set_Current_Field (FORM*, FIELD*);
-extern NCURSES_EXPORT(int) _nc_Position_Form_Cursor (FORM*);
+extern NCFORM_EXPORT(TypeArgument *) _nc_Make_Argument (const FIELDTYPE*, va_list*, int*);
+extern NCFORM_EXPORT(TypeArgument *) _nc_Copy_Argument (const FIELDTYPE*, const TypeArgument*, int*);
+extern NCFORM_EXPORT(void) _nc_Free_Argument (const FIELDTYPE*, TypeArgument*);
+extern NCFORM_EXPORT(bool) _nc_Copy_Type (FIELD*, FIELD const *);
+extern NCFORM_EXPORT(void) _nc_Free_Type (FIELD *);
+
+extern NCFORM_EXPORT(int) _nc_Synchronize_Attributes (FIELD*);
+extern NCFORM_EXPORT(int) _nc_Synchronize_Options (FIELD*, Field_Options);
+extern NCFORM_EXPORT(int) _nc_Set_Form_Page (FORM*, int, FIELD*);
+extern NCFORM_EXPORT(int) _nc_Refresh_Current_Field (FORM*);
+extern NCFORM_EXPORT(FIELD *) _nc_First_Active_Field (FORM*);
+extern NCFORM_EXPORT(bool) _nc_Internal_Validation (FORM*);
+extern NCFORM_EXPORT(int) _nc_Set_Current_Field (FORM*, FIELD*);
+extern NCFORM_EXPORT(int) _nc_Position_Form_Cursor (FORM*);
 
 #if NCURSES_INTEROP_FUNCS
-extern NCURSES_EXPORT(FIELDTYPE *) _nc_TYPE_INTEGER(void);
-extern NCURSES_EXPORT(FIELDTYPE *) _nc_TYPE_ALNUM(void);
-extern NCURSES_EXPORT(FIELDTYPE *) _nc_TYPE_ALPHA(void);
-extern NCURSES_EXPORT(FIELDTYPE *) _nc_TYPE_ENUM(void);
-extern NCURSES_EXPORT(FIELDTYPE *) _nc_TYPE_NUMERIC(void);
-extern NCURSES_EXPORT(FIELDTYPE *) _nc_TYPE_REGEXP(void);
-extern NCURSES_EXPORT(FIELDTYPE *) _nc_TYPE_IPV4(void);
+extern NCFORM_EXPORT(FIELDTYPE *) _nc_TYPE_INTEGER(void);
+extern NCFORM_EXPORT(FIELDTYPE *) _nc_TYPE_ALNUM(void);
+extern NCFORM_EXPORT(FIELDTYPE *) _nc_TYPE_ALPHA(void);
+extern NCFORM_EXPORT(FIELDTYPE *) _nc_TYPE_ENUM(void);
+extern NCFORM_EXPORT(FIELDTYPE *) _nc_TYPE_NUMERIC(void);
+extern NCFORM_EXPORT(FIELDTYPE *) _nc_TYPE_REGEXP(void);
+extern NCFORM_EXPORT(FIELDTYPE *) _nc_TYPE_IPV4(void);
 
-extern NCURSES_EXPORT(FIELDTYPE *)
+extern NCFORM_EXPORT(FIELDTYPE *)
 _nc_generic_fieldtype(bool (*const field_check) (FORM*, 
 						 FIELD *, 
 						 const void *),
@@ -198,18 +198,18 @@
 		      bool (*const next)(FORM*,FIELD*,const void*),
 		      bool (*const prev)(FORM*,FIELD*,const void*),
 		      void (*freecallback)(void*));
-extern NCURSES_EXPORT(int) _nc_set_generic_fieldtype(FIELD*, FIELDTYPE*, int (*)(void**));
-extern NCURSES_EXPORT(WINDOW*) _nc_form_cursor(const FORM* , int* , int* );
+extern NCFORM_EXPORT(int) _nc_set_generic_fieldtype(FIELD*, FIELDTYPE*, int (*)(void**));
+extern NCFORM_EXPORT(WINDOW*) _nc_form_cursor(const FORM* , int* , int* );
 
 #define INIT_FT_FUNC(func) {func}
 #else
 #define INIT_FT_FUNC(func) func
 #endif
 
-extern NCURSES_EXPORT(void) _nc_get_fieldbuffer(FORM*, FIELD*, FIELD_CELL*);
+extern NCFORM_EXPORT(void) _nc_get_fieldbuffer(FORM*, FIELD*, FIELD_CELL*);
 
 #if USE_WIDEC_SUPPORT
-extern NCURSES_EXPORT(wchar_t *) _nc_Widen_String(char *, int *);
+extern NCFORM_EXPORT(wchar_t *) _nc_Widen_String(char *, int *);
 #endif
 
 #ifdef TRACE
@@ -220,11 +220,11 @@
 #define returnFieldType(code)	TRACE_RETURN(code,field_type)
 #define returnFormHook(code)	TRACE_RETURN(code,form_hook)
 
-extern NCURSES_EXPORT(FIELD **)	    _nc_retrace_field_ptr (FIELD **);
-extern NCURSES_EXPORT(FIELD *)	    _nc_retrace_field (FIELD *);
-extern NCURSES_EXPORT(FIELDTYPE *)  _nc_retrace_field_type (FIELDTYPE *);
-extern NCURSES_EXPORT(FORM *)       _nc_retrace_form (FORM *);
-extern NCURSES_EXPORT(Form_Hook)    _nc_retrace_form_hook (Form_Hook);
+extern NCFORM_EXPORT(FIELD **)	    _nc_retrace_field_ptr (FIELD **);
+extern NCFORM_EXPORT(FIELD *)	    _nc_retrace_field (FIELD *);
+extern NCFORM_EXPORT(FIELDTYPE *)  _nc_retrace_field_type (FIELDTYPE *);
+extern NCFORM_EXPORT(FORM *)       _nc_retrace_form (FORM *);
+extern NCFORM_EXPORT(Form_Hook)    _nc_retrace_form_hook (Form_Hook);
 
 #else /* !TRACE */
 
diff -ur ncurses-5.9-orig/form/frm_cursor.c ncurses-5.9/form/frm_cursor.c
--- ncurses-5.9-orig/form/frm_cursor.c	2010-01-23 16:14:36 -0500
+++ ncurses-5.9/form/frm_cursor.c	2013-07-04 18:38:37 -0400
@@ -48,7 +48,7 @@
 |                    E_BAD_ARGUMENT            - Invalid form pointer
 |                    E_NOT_POSTED              - Form is not posted
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 pos_form_cursor(FORM *form)
 {
   int res;
diff -ur ncurses-5.9-orig/form/frm_data.c ncurses-5.9/form/frm_data.c
--- ncurses-5.9-orig/form/frm_data.c	2010-01-23 16:14:36 -0500
+++ ncurses-5.9/form/frm_data.c	2013-07-04 18:38:37 -0400
@@ -44,7 +44,7 @@
 |   Return Values :  TRUE   - there are off-screen data behind
 |                    FALSE  - there are no off-screen data behind
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(bool)
+NCFORM_EXPORT(bool)
 data_behind(const FORM *form)
 {
   bool result = FALSE;
@@ -131,7 +131,7 @@
 |   Return Values :  TRUE   - there are off-screen data ahead
 |                    FALSE  - there are no off-screen data ahead
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(bool)
+NCFORM_EXPORT(bool)
 data_ahead(const FORM *form)
 {
   bool result = FALSE;
diff -ur ncurses-5.9-orig/form/frm_def.c ncurses-5.9/form/frm_def.c
--- ncurses-5.9-orig/form/frm_def.c	2010-01-23 16:14:36 -0500
+++ ncurses-5.9/form/frm_def.c	2013-07-04 18:38:37 -0400
@@ -61,7 +61,7 @@
   NULL				/* fieldterm  */
 };
 
-NCURSES_EXPORT_VAR(FORM *) _nc_Default_Form = &default_form;
+NCFORM_EXPORT_VAR(FORM *) _nc_Default_Form = &default_form;
 
 /*---------------------------------------------------------------------------
 |   Facility      :  libnform  
@@ -294,7 +294,7 @@
 |                    E_CONNECTED     - a field is already connected
 |                    E_SYSTEM_ERROR  - not enough memory
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(FORM *)
+NCFORM_EXPORT(FORM *)
 NCURSES_SP_NAME(new_form) (NCURSES_SP_DCLx FIELD **fields)
 {
   int err = E_SYSTEM_ERROR;
@@ -343,7 +343,7 @@
 |                    E_SYSTEM_ERROR  - not enough memory
 +--------------------------------------------------------------------------*/
 #if NCURSES_SP_FUNCS
-NCURSES_EXPORT(FORM *)
+NCFORM_EXPORT(FORM *)
 new_form(FIELD **fields)
 {
   return NCURSES_SP_NAME(new_form) (CURRENT_SCREEN, fields);
@@ -360,7 +360,7 @@
 |                    E_BAD_ARGUMENT - invalid form pointer
 |                    E_POSTED       - form is posted
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 free_form(FORM *form)
 {
   T((T_CALLED("free_form(%p)"), (void *)form));
@@ -391,7 +391,7 @@
 |                    E_POSTED        - form is posted
 |                    E_SYSTEM_ERROR  - not enough memory
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 set_form_fields(FORM *form, FIELD **fields)
 {
   FIELD **old;
@@ -422,7 +422,7 @@
 |
 |   Return Values :  Pointer to field array
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(FIELD **)
+NCFORM_EXPORT(FIELD **)
 form_fields(const FORM *form)
 {
   T((T_CALLED("form_field(%p)"), (const void *)form));
@@ -437,7 +437,7 @@
 |
 |   Return Values :  Number of fields, -1 if none are defined
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 field_count(const FORM *form)
 {
   T((T_CALLED("field_count(%p)"), (const void *)form));
diff -ur ncurses-5.9-orig/form/frm_driver.c ncurses-5.9/form/frm_driver.c
--- ncurses-5.9-orig/form/frm_driver.c	2010-05-01 17:11:43 -0400
+++ ncurses-5.9/form/frm_driver.c	2013-07-04 18:38:37 -0400
@@ -524,7 +524,7 @@
 |
 |   Return Values :  -
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void)
+NCFORM_EXPORT(void)
 _nc_get_fieldbuffer(FORM *form, FIELD *field, FIELD_CELL *buf)
 {
   int pad;
@@ -802,7 +802,7 @@
 |                    E_SYSTEM_ERROR    - form has no current field or
 |                                        field-window
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 _nc_Position_Form_Cursor(FORM *form)
 {
   FIELD *field;
@@ -843,7 +843,7 @@
 |                    E_BAD_ARGUMENT    - invalid form pointer
 |                    E_SYSTEM_ERROR    - general error
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 _nc_Refresh_Current_Field(FORM *form)
 {
   WINDOW *formwin;
@@ -1233,7 +1233,7 @@
 |                    E_BAD_ARGUMENT   - invalid field pointer
 |                    E_SYSTEM_ERROR   - some severe basic error
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 _nc_Synchronize_Attributes(FIELD *field)
 {
   FORM *form;
@@ -1299,7 +1299,7 @@
 |                    E_CURRENT           - field is the current one
 |                    E_SYSTEM_ERROR      - some severe basic error
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 _nc_Synchronize_Options(FIELD *field, Field_Options newopts)
 {
   Field_Options oldopts;
@@ -1401,7 +1401,7 @@
 |                    E_SYSTEM_ERROR    - some severe basic error
 |                    E_NOT_CONNECTED   - no fields are connected to the form
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 _nc_Set_Current_Field(FORM *form, FIELD *newfield)
 {
   FIELD *field;
@@ -3159,7 +3159,7 @@
 |   Return Values :  TRUE  - field is valid
 |                    FALSE - field is invalid
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(bool)
+NCFORM_EXPORT(bool)
 _nc_Internal_Validation(FORM *form)
 {
   FIELD *field;
@@ -3253,7 +3253,7 @@
 |
 |   Return Values :  Pointer to calculated field.
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(FIELD *)
+NCFORM_EXPORT(FIELD *)
 _nc_First_Active_Field(FORM *form)
 {
   FIELD **last_on_page = &form->field[form->page[form->curpage].pmax];
@@ -3806,7 +3806,7 @@
 |                    E_BAD_ARGUMENT      - invalid field pointer
 |                    E_SYSTEM_ERROR      - some severe basic error
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 _nc_Set_Form_Page(FORM *form, int page, FIELD *field)
 {
   int res = E_OK;
@@ -4193,7 +4193,7 @@
 |                    E_NOT_CONNECTED   - no fields are connected to the form
 |                    E_UNKNOWN_COMMAND - command not known
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 form_driver(FORM *form, int c)
 {
   const Binding_Info *BI = (Binding_Info *) 0;
@@ -4384,7 +4384,7 @@
 |                    E_BAD_ARGUMENT  - invalid argument
 |                    E_SYSTEM_ERROR  - system error
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 set_field_buffer(FIELD *field, int buffer, const char *value)
 {
   FIELD_CELL *p;
@@ -4501,7 +4501,7 @@
 |
 |   Return Values :  Pointer to buffer or NULL if arguments were invalid.
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(char *)
+NCFORM_EXPORT(char *)
 field_buffer(const FIELD *field, int buffer)
 {
   char *result = 0;
@@ -4569,7 +4569,7 @@
 | Convert a multibyte string to a wide-character string.  The result must be
 | freed by the caller.
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(wchar_t *)
+NCFORM_EXPORT(wchar_t *)
 _nc_Widen_String(char *source, int *lengthp)
 {
   wchar_t *result = 0;
diff -ur ncurses-5.9-orig/form/frm_hook.c ncurses-5.9/form/frm_hook.c
--- ncurses-5.9-orig/form/frm_hook.c	2010-01-23 16:12:08 -0500
+++ ncurses-5.9/form/frm_hook.c	2013-07-04 18:38:37 -0400
@@ -36,7 +36,7 @@
 
 /* "Template" macro to generate function to set application specific hook */
 #define GEN_HOOK_SET_FUNCTION( typ, name ) \
-NCURSES_IMPEXP int NCURSES_API set_ ## typ ## _ ## name (FORM *form, Form_Hook func)\
+NCFORM_IMPEXP int NCFORM_API set_ ## typ ## _ ## name (FORM *form, Form_Hook func)\
 {\
    T((T_CALLED("set_" #typ"_"#name"(%p,%p)"), form, func));\
    (Normalize_Form( form ) -> typ ## name) = func ;\
@@ -45,7 +45,7 @@
 
 /* "Template" macro to generate function to get application specific hook */
 #define GEN_HOOK_GET_FUNCTION( typ, name ) \
-NCURSES_IMPEXP Form_Hook NCURSES_API typ ## _ ## name ( const FORM *form )\
+NCFORM_IMPEXP Form_Hook NCFORM_API typ ## _ ## name ( const FORM *form )\
 {\
    T((T_CALLED(#typ "_" #name "(%p)"), (const void *) form));\
    returnFormHook( Normalize_Form( form ) -> typ ## name );\
diff -ur ncurses-5.9-orig/form/frm_opts.c ncurses-5.9/form/frm_opts.c
--- ncurses-5.9-orig/form/frm_opts.c	2010-01-23 16:14:36 -0500
+++ ncurses-5.9/form/frm_opts.c	2013-07-04 18:38:37 -0400
@@ -44,7 +44,7 @@
 |   Return Values :  E_OK              - success
 |                    E_BAD_ARGUMENT    - invalid options
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 set_form_opts(FORM *form, Form_Options opts)
 {
   T((T_CALLED("set_form_opts(%p,%d)"), (void *)form, opts));
@@ -67,7 +67,7 @@
 |
 |   Return Values :  The option flags.
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(Form_Options)
+NCFORM_EXPORT(Form_Options)
 form_opts(const FORM *form)
 {
   T((T_CALLED("form_opts(%p)"), (const void *)form));
@@ -84,7 +84,7 @@
 |   Return Values :  E_OK            - success 
 |                    E_BAD_ARGUMENT  - invalid options
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 form_opts_on(FORM *form, Form_Options opts)
 {
   T((T_CALLED("form_opts_on(%p,%d)"), (void *)form, opts));
@@ -109,7 +109,7 @@
 |   Return Values :  E_OK            - success 
 |                    E_BAD_ARGUMENT  - invalid options
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 form_opts_off(FORM *form, Form_Options opts)
 {
   T((T_CALLED("form_opts_off(%p,%d)"), (void *)form, opts));
diff -ur ncurses-5.9-orig/form/frm_page.c ncurses-5.9/form/frm_page.c
--- ncurses-5.9-orig/form/frm_page.c	2010-01-23 16:14:36 -0500
+++ ncurses-5.9/form/frm_page.c	2013-07-04 18:38:37 -0400
@@ -46,7 +46,7 @@
 |                    E_INVALID_FIELD   - current field can't be left
 |                    E_SYSTEM_ERROR    - system error
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 set_form_page(FORM *form, int page)
 {
   int err = E_OK;
@@ -95,7 +95,7 @@
 |   Return Values :  >= 0  : current page number
 |                    -1    : invalid form pointer
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 form_page(const FORM *form)
 {
   T((T_CALLED("form_page(%p)"), (const void *)form));
diff -ur ncurses-5.9-orig/form/frm_post.c ncurses-5.9/form/frm_post.c
--- ncurses-5.9-orig/form/frm_post.c	2010-01-23 16:14:36 -0500
+++ ncurses-5.9/form/frm_post.c	2013-07-04 18:38:37 -0400
@@ -47,7 +47,7 @@
 |                    E_NO_ROOM         - form doesn't fit into subwindow
 |                    E_SYSTEM_ERROR    - system error
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 post_form(FORM *form)
 {
   WINDOW *formwin;
@@ -97,7 +97,7 @@
 |                    E_NOT_POSTED    - form isn't posted
 |                    E_BAD_STATE     - called from a hook routine
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 unpost_form(FORM *form)
 {
   T((T_CALLED("unpost_form(%p)"), (void *)form));
diff -ur ncurses-5.9-orig/form/frm_req_name.c ncurses-5.9/form/frm_req_name.c
--- ncurses-5.9-orig/form/frm_req_name.c	2009-10-10 12:17:01 -0400
+++ ncurses-5.9/form/frm_req_name.c	2013-07-04 18:38:37 -0400
@@ -115,7 +115,7 @@
 |   Return Values :  Pointer to name      - on success
 |                    NULL                 - on invalid request code
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(const char *)
+NCFORM_EXPORT(const char *)
 form_request_name(int request)
 {
   T((T_CALLED("form_request_name(%d)"), request));
@@ -138,7 +138,7 @@
 |   Return Values :  Request Id       - on success
 |                    E_NO_MATCH       - request not found
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 form_request_by_name(const char *str)
 {
   /* because the table is so small, it doesn't really hurt
diff -ur ncurses-5.9-orig/form/frm_scale.c ncurses-5.9/form/frm_scale.c
--- ncurses-5.9-orig/form/frm_scale.c	2010-01-23 16:14:36 -0500
+++ ncurses-5.9/form/frm_scale.c	2013-07-04 18:38:37 -0400
@@ -44,7 +44,7 @@
 |                    E_BAD_ARGUMENT    - invalid form pointer
 |                    E_NOT_CONNECTED   - no fields connected to form
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 scale_form(const FORM *form, int *rows, int *cols)
 {
   T((T_CALLED("scale_form(%p,%p,%p)"),
diff -ur ncurses-5.9-orig/form/frm_sub.c ncurses-5.9/form/frm_sub.c
--- ncurses-5.9-orig/form/frm_sub.c	2010-01-23 16:14:36 -0500
+++ ncurses-5.9/form/frm_sub.c	2013-07-04 18:38:37 -0400
@@ -43,7 +43,7 @@
 |   Return Values :  E_OK       - success
 |                    E_POSTED   - form is posted
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 set_form_sub(FORM *form, WINDOW *win)
 {
   T((T_CALLED("set_form_sub(%p,%p)"), (void *)form, (void *)win));
@@ -72,7 +72,7 @@
 |
 |   Return Values :  The pointer to the Subwindow.
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(WINDOW *)
+NCFORM_EXPORT(WINDOW *)
 form_sub(const FORM *form)
 {
   const FORM *f;
diff -ur ncurses-5.9-orig/form/frm_user.c ncurses-5.9/form/frm_user.c
--- ncurses-5.9-orig/form/frm_user.c	2010-01-23 16:14:36 -0500
+++ ncurses-5.9/form/frm_user.c	2013-07-04 18:38:37 -0400
@@ -43,7 +43,7 @@
 |
 |   Return Values :  E_OK         - on success
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 set_form_userptr(FORM *form, void *usrptr)
 {
   T((T_CALLED("set_form_userptr(%p,%p)"), (void *)form, (void *)usrptr));
@@ -62,7 +62,7 @@
 |   Return Values :  Value of pointer. If no such pointer has been set,
 |                    NULL is returned
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void *)
+NCFORM_EXPORT(void *)
 form_userptr(const FORM *form)
 {
   T((T_CALLED("form_userptr(%p)"), (const void *)form));
diff -ur ncurses-5.9-orig/form/frm_win.c ncurses-5.9/form/frm_win.c
--- ncurses-5.9-orig/form/frm_win.c	2010-01-23 16:14:36 -0500
+++ ncurses-5.9/form/frm_win.c	2013-07-04 18:38:37 -0400
@@ -43,7 +43,7 @@
 |   Return Values :  E_OK       - success
 |                    E_POSTED   - form is posted
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 set_form_win(FORM *form, WINDOW *win)
 {
   T((T_CALLED("set_form_win(%p,%p)"), (void *)form, (void *)win));
@@ -72,7 +72,7 @@
 |
 |   Return Values :  The pointer to the Window or stdscr if there is none.
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(WINDOW *)
+NCFORM_EXPORT(WINDOW *)
 form_win(const FORM *form)
 {
   WINDOW *result;
diff -ur ncurses-5.9-orig/form/fty_alnum.c ncurses-5.9/form/fty_alnum.c
--- ncurses-5.9-orig/form/fty_alnum.c	2010-01-23 16:14:36 -0500
+++ ncurses-5.9/form/fty_alnum.c	2013-07-04 18:38:37 -0400
@@ -185,14 +185,14 @@
 #endif
 };
 
-NCURSES_EXPORT_VAR(FIELDTYPE*) TYPE_ALNUM = &typeTHIS;
+NCFORM_EXPORT_VAR(FIELDTYPE*) TYPE_ALNUM = &typeTHIS;
 
 #if NCURSES_INTEROP_FUNCS
 /* The next routines are to simplify the use of ncurses from
    programming languages with restictions on interop with C level
    constructs (e.g. variable access or va_list + ellipsis constructs)
 */
-NCURSES_EXPORT(FIELDTYPE *)
+NCFORM_EXPORT(FIELDTYPE *)
 _nc_TYPE_ALNUM(void)
 {
   return TYPE_ALNUM;
diff -ur ncurses-5.9-orig/form/fty_alpha.c ncurses-5.9/form/fty_alpha.c
--- ncurses-5.9-orig/form/fty_alpha.c	2010-01-23 16:14:36 -0500
+++ ncurses-5.9/form/fty_alpha.c	2013-07-04 18:38:37 -0400
@@ -185,14 +185,14 @@
 #endif
 };
 
-NCURSES_EXPORT_VAR(FIELDTYPE*) TYPE_ALPHA = &typeTHIS;
+NCFORM_EXPORT_VAR(FIELDTYPE*) TYPE_ALPHA = &typeTHIS;
 
 #if NCURSES_INTEROP_FUNCS
 /* The next routines are to simplify the use of ncurses from
    programming languages with restictions on interop with C level
    constructs (e.g. variable access or va_list + ellipsis constructs)
 */
-NCURSES_EXPORT(FIELDTYPE *)
+NCFORM_EXPORT(FIELDTYPE *)
 _nc_TYPE_ALPHA(void)
 {
   return TYPE_ALPHA;
diff -ur ncurses-5.9-orig/form/fty_enum.c ncurses-5.9/form/fty_enum.c
--- ncurses-5.9-orig/form/fty_enum.c	2010-05-01 17:11:07 -0400
+++ ncurses-5.9/form/fty_enum.c	2013-07-04 18:38:37 -0400
@@ -424,7 +424,7 @@
 #endif
 };
 
-NCURSES_EXPORT_VAR(FIELDTYPE *)
+NCFORM_EXPORT_VAR(FIELDTYPE *)
 TYPE_ENUM = &typeENUM;
 
 #if NCURSES_INTEROP_FUNCS
@@ -432,7 +432,7 @@
    programming languages with restictions on interop with C level
    constructs (e.g. variable access or va_list + ellipsis constructs)
 */
-NCURSES_EXPORT(FIELDTYPE *)
+NCFORM_EXPORT(FIELDTYPE *)
 _nc_TYPE_ENUM(void)
 {
   return TYPE_ENUM;
diff -ur ncurses-5.9-orig/form/fty_generic.c ncurses-5.9/form/fty_generic.c
--- ncurses-5.9-orig/form/fty_generic.c	2010-01-23 16:14:36 -0500
+++ ncurses-5.9/form/fty_generic.c	2013-07-04 18:38:37 -0400
@@ -98,7 +98,7 @@
 |
 |   Return Values :  Fieldtype pointer or NULL if error occurred
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(FIELDTYPE *)
+NCFORM_EXPORT(FIELDTYPE *)
 _nc_generic_fieldtype(bool (*const field_check) (FORM *, FIELD *, const void *),
 		      bool (*const char_check) (int, FORM *, FIELD *, const
 						void *),
@@ -213,7 +213,7 @@
 |   Return Values :  E_OK if all went well
 |                    E_SYSTEM_ERROR if an error occurred
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCFORM_EXPORT(int)
 _nc_set_generic_fieldtype(FIELD *field,
 			  FIELDTYPE *ftyp,
 			  int (*argiterator) (void **))
@@ -268,7 +268,7 @@
 |
 |   Return Values :  The fields Window or NULL on error
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(WINDOW *)
+NCFORM_EXPORT(WINDOW *)
 _nc_form_cursor(const FORM *form, int *pRow, int *pCol)
 {
   int code = E_SYSTEM_ERROR;
diff -ur ncurses-5.9-orig/form/fty_int.c ncurses-5.9/form/fty_int.c
--- ncurses-5.9-orig/form/fty_int.c	2010-01-23 16:14:36 -0500
+++ ncurses-5.9/form/fty_int.c	2013-07-04 18:38:37 -0400
@@ -276,14 +276,14 @@
 #endif
 };
 
-NCURSES_EXPORT_VAR(FIELDTYPE*) TYPE_INTEGER = &typeTHIS;
+NCFORM_EXPORT_VAR(FIELDTYPE*) TYPE_INTEGER = &typeTHIS;
 
 #if NCURSES_INTEROP_FUNCS
 /* The next routines are to simplify the use of ncurses from
    programming languages with restictions on interop with C level
    constructs (e.g. variable access or va_list + ellipsis constructs)
 */
-NCURSES_EXPORT(FIELDTYPE *)
+NCFORM_EXPORT(FIELDTYPE *)
 _nc_TYPE_INTEGER(void)
 {
   return TYPE_INTEGER;
diff -ur ncurses-5.9-orig/form/fty_ipv4.c ncurses-5.9/form/fty_ipv4.c
--- ncurses-5.9-orig/form/fty_ipv4.c	2009-11-07 15:17:58 -0500
+++ ncurses-5.9/form/fty_ipv4.c	2013-07-04 18:38:37 -0400
@@ -103,14 +103,14 @@
 #endif
 };
 
-NCURSES_EXPORT_VAR(FIELDTYPE*) TYPE_IPV4 = &typeIPV4;
+NCFORM_EXPORT_VAR(FIELDTYPE*) TYPE_IPV4 = &typeIPV4;
 
 #if NCURSES_INTEROP_FUNCS
 /* The next routines are to simplify the use of ncurses from
    programming languages with restictions on interop with C level
    constructs (e.g. variable access or va_list + ellipsis constructs)
 */
-NCURSES_EXPORT(FIELDTYPE *)
+NCFORM_EXPORT(FIELDTYPE *)
 _nc_TYPE_IPV4(void)
 {
   return TYPE_IPV4;
diff -ur ncurses-5.9-orig/form/fty_num.c ncurses-5.9/form/fty_num.c
--- ncurses-5.9-orig/form/fty_num.c	2010-01-23 16:14:36 -0500
+++ ncurses-5.9/form/fty_num.c	2013-07-04 18:38:37 -0400
@@ -322,14 +322,14 @@
 #endif
 };
 
-NCURSES_EXPORT_VAR(FIELDTYPE*) TYPE_NUMERIC = &typeTHIS;
+NCFORM_EXPORT_VAR(FIELDTYPE*) TYPE_NUMERIC = &typeTHIS;
 
 #if NCURSES_INTEROP_FUNCS
 /* The next routines are to simplify the use of ncurses from
    programming languages with restictions on interop with C level
    constructs (e.g. variable access or va_list + ellipsis constructs)
 */
-NCURSES_EXPORT(FIELDTYPE *)
+NCFORM_EXPORT(FIELDTYPE *)
 _nc_TYPE_NUMERIC(void)
 {
   return TYPE_NUMERIC;
diff -ur ncurses-5.9-orig/form/fty_regex.c ncurses-5.9/form/fty_regex.c
--- ncurses-5.9-orig/form/fty_regex.c	2010-01-23 16:14:37 -0500
+++ ncurses-5.9/form/fty_regex.c	2013-07-04 18:38:37 -0400
@@ -333,14 +333,14 @@
 #endif
 };
 
-NCURSES_EXPORT_VAR(FIELDTYPE*) TYPE_REGEXP = &typeREGEXP;
+NCFORM_EXPORT_VAR(FIELDTYPE*) TYPE_REGEXP = &typeREGEXP;
 
 #if NCURSES_INTEROP_FUNCS
 /* The next routines are to simplify the use of ncurses from
    programming languages with restictions on interop with C level
    constructs (e.g. variable access or va_list + ellipsis constructs)
 */
-NCURSES_EXPORT(FIELDTYPE *)
+NCFORM_EXPORT(FIELDTYPE *)
 _nc_TYPE_REGEXP(void)
 {
   return TYPE_REGEXP;
diff -ur ncurses-5.9-orig/include/MKkey_defs.sh ncurses-5.9/include/MKkey_defs.sh
--- ncurses-5.9-orig/include/MKkey_defs.sh	2003-12-06 12:10:09 -0500
+++ ncurses-5.9/include/MKkey_defs.sh	2013-07-04 18:38:37 -0400
@@ -62,7 +62,7 @@
 # add keys that we generate automatically:
 cat >>$data <<EOF
 key_resize	kr1	str	R1	KEY_RESIZE	+	-----	Terminal resize event
-key_event	kv1	str	V1	KEY_EVENT	+	-----	We were interrupted by an event
+key_event	kv1	str	V1	KEY_EVENT_	+	-----	We were interrupted by an event
 EOF
 
 cat <<EOF
diff -ur ncurses-5.9-orig/include/MKterm.h.awk.in ncurses-5.9/include/MKterm.h.awk.in
--- ncurses-5.9-orig/include/MKterm.h.awk.in	2010-01-09 14:53:26 -0500
+++ ncurses-5.9/include/MKterm.h.awk.in	2013-07-04 18:38:37 -0400
@@ -130,7 +130,7 @@
 		    print  ""
 		    print  "#else /* !HAVE_TERMIO_H */"
 		    print  ""
-		    print  "#if __MINGW32__"
+		    print  "#if __MINGW32__ || defined(_MSC_VER)"
 		    print  "#  include <ncurses_mingw.h>"
 		    print  "#  define TTY struct termios"
 		    print  "#else"
diff -ur ncurses-5.9-orig/include/nc_mingw.h ncurses-5.9/include/nc_mingw.h
--- ncurses-5.9-orig/include/nc_mingw.h	2010-09-25 18:16:12 -0400
+++ ncurses-5.9/include/nc_mingw.h	2013-07-04 18:38:37 -0400
@@ -43,6 +43,7 @@
 #else
 #  define WINVER 0x0501
 #endif
+#include <winsock2.h>
 #include <windows.h>
 
 #undef sleep
@@ -51,7 +52,9 @@
 #undef gettimeofday
 #define gettimeofday(tv,tz) _nc_gettimeofday(tv,tz)
 
+#ifndef _MSC_VER
 #include <sys/time.h>	/* for struct timeval */
+#endif
 
 extern int _nc_gettimeofday(struct timeval *, void *);
 
diff -ur ncurses-5.9-orig/include/ncurses_dll.h.in ncurses-5.9/include/ncurses_dll.h.in
--- ncurses-5.9-orig/include/ncurses_dll.h.in	2009-04-04 18:26:27 -0400
+++ ncurses-5.9/include/ncurses_dll.h.in	2013-07-04 18:38:37 -0400
@@ -41,10 +41,9 @@
 /* but this structure may be useful at some point for an MSVC build */
 /* so, for now unconditionally define the important flags           */
 /* "the right way" for proper static and dll+auto-import behavior   */
-#undef NCURSES_DLL
-#define NCURSES_STATIC
+#undef NCURSES_STATIC
 
-#if defined(__CYGWIN__) || defined(__MINGW32__)
+#if defined(__CYGWIN__) || defined(__MINGW32__) || defined(_MSC_VER)
 #  if defined(NCURSES_DLL)
 #    if defined(NCURSES_STATIC)
 #      undef NCURSES_STATIC
@@ -67,6 +66,98 @@
 #  define NCURSES_API __cdecl
 #  define NCURSES_EXPORT(type) NCURSES_IMPEXP type NCURSES_API
 #  define NCURSES_EXPORT_VAR(type) NCURSES_IMPEXP type
+
+#  if defined(NCURSESXX_DLL)
+#    if defined(NCURSES_STATIC)
+#      undef NCURSES_STATIC
+#    endif
+#  endif
+#  undef NCURSESXX_IMPEXP
+#  undef NCURSESXX_API
+#  undef NCURSESXX_EXPORT
+#  undef NCURSESXX_EXPORT_VAR
+#  if defined(NCURSESXX_DLL)
+/* building a DLL */
+#    define NCURSESXX_IMPEXP __declspec(dllexport)
+#  elif defined(NCURSES_STATIC)
+/* building or linking to a static library */
+#    define NCURSESXX_IMPEXP /* nothing */
+#  else
+/* linking to the DLL */
+#    define NCURSESXX_IMPEXP __declspec(dllimport)
+#  endif
+#  define NCURSESXX_API __cdecl
+#  define NCURSESXX_EXPORT(type) NCURSESXX_IMPEXP type NCURSESXX_API
+#  define NCURSESXX_EXPORT_VAR(type) NCURSESXX_IMPEXP type
+
+#  if defined(NCMENU_DLL)
+#    if defined(NCURSES_STATIC)
+#      undef NCURSES_STATIC
+#    endif
+#  endif
+#  undef NCMENU_IMPEXP
+#  undef NCMENU_API
+#  undef NCMENU_EXPORT
+#  undef NCMENU_EXPORT_VAR
+#  if defined(NCMENU_DLL)
+/* building a DLL */
+#    define NCMENU_IMPEXP __declspec(dllexport)
+#  elif defined(NCURSES_STATIC)
+/* building or linking to a static library */
+#    define NCMENU_IMPEXP /* nothing */
+#  else
+/* linking to the DLL */
+#    define NCMENU_IMPEXP __declspec(dllimport)
+#  endif
+#  define NCMENU_API __cdecl
+#  define NCMENU_EXPORT(type) NCMENU_IMPEXP type NCMENU_API
+#  define NCMENU_EXPORT_VAR(type) NCMENU_IMPEXP type
+
+#  if defined(NCPANEL_DLL)
+#    if defined(NCURSES_STATIC)
+#      undef NCURSES_STATIC
+#    endif
+#  endif
+#  undef NCPANEL_IMPEXP
+#  undef NCPANEL_API
+#  undef NCPANEL_EXPORT
+#  undef NCPANEL_EXPORT_VAR
+#  if defined(NCPANEL_DLL)
+/* building a DLL */
+#    define NCPANEL_IMPEXP __declspec(dllexport)
+#  elif defined(NCURSES_STATIC)
+/* building or linking to a static library */
+#    define NCPANEL_IMPEXP /* nothing */
+#  else
+/* linking to the DLL */
+#    define NCPANEL_IMPEXP __declspec(dllimport)
+#  endif
+#  define NCPANEL_API __cdecl
+#  define NCPANEL_EXPORT(type) NCPANEL_IMPEXP type NCPANEL_API
+#  define NCPANEL_EXPORT_VAR(type) NCPANEL_IMPEXP type
+
+#  if defined(NCFORM_DLL)
+#    if defined(NCURSES_STATIC)
+#      undef NCURSES_STATIC
+#    endif
+#  endif
+#  undef NCFORM_IMPEXP
+#  undef NCFORM_API
+#  undef NCFORM_EXPORT
+#  undef NCFORM_EXPORT_VAR
+#  if defined(NCFORM_DLL)
+/* building a DLL */
+#    define NCFORM_IMPEXP __declspec(dllexport)
+#  elif defined(NCURSES_STATIC)
+/* building or linking to a static library */
+#    define NCFORM_IMPEXP /* nothing */
+#  else
+/* linking to the DLL */
+#    define NCFORM_IMPEXP __declspec(dllimport)
+#  endif
+#  define NCFORM_API __cdecl
+#  define NCFORM_EXPORT(type) NCFORM_IMPEXP type NCFORM_API
+#  define NCFORM_EXPORT_VAR(type) NCFORM_IMPEXP type
 #endif
 
 /* Take care of non-cygwin platforms */
@@ -83,4 +174,43 @@
 #  define NCURSES_EXPORT_VAR(type) NCURSES_IMPEXP type
 #endif
 
+#if !defined(NCMENU_IMPEXP)
+#  define NCMENU_IMPEXP /* nothing */
+#endif
+#if !defined(NCMENU_API)
+#  define NCMENU_API /* nothing */
+#endif
+#if !defined(NCMENU_EXPORT)
+#  define NCMENU_EXPORT(type) NCMENU_IMPEXP type NCMENU_API
+#endif
+#if !defined(NCMENU_EXPORT_VAR)
+#  define NCMENU_EXPORT_VAR(type) NCMENU_IMPEXP type
+#endif
+
+#if !defined(NCPANEL_IMPEXP)
+#  define NCPANEL_IMPEXP /* nothing */
+#endif
+#if !defined(NCPANEL_API)
+#  define NCPANEL_API /* nothing */
+#endif
+#if !defined(NCPANEL_EXPORT)
+#  define NCPANEL_EXPORT(type) NCPANEL_IMPEXP type NCPANEL_API
+#endif
+#if !defined(NCPANEL_EXPORT_VAR)
+#  define NCPANEL_EXPORT_VAR(type) NCPANEL_IMPEXP type
+#endif
+
+#if !defined(NCFORM_IMPEXP)
+#  define NCFORM_IMPEXP /* nothing */
+#endif
+#if !defined(NCFORM_API)
+#  define NCFORM_API /* nothing */
+#endif
+#if !defined(NCFORM_EXPORT)
+#  define NCFORM_EXPORT(type) NCFORM_IMPEXP type NCFORM_API
+#endif
+#if !defined(NCFORM_EXPORT_VAR)
+#  define NCFORM_EXPORT_VAR(type) NCFORM_IMPEXP type
+#endif
+
 #endif /* NCURSES_DLL_H_incl */
diff -ur ncurses-5.9-orig/include/ncurses_mingw.h ncurses-5.9/include/ncurses_mingw.h
--- ncurses-5.9-orig/include/ncurses_mingw.h	2008-12-14 14:22:16 -0500
+++ ncurses-5.9/include/ncurses_mingw.h	2013-07-04 18:38:37 -0400
@@ -38,7 +38,7 @@
  * to support I/O to external terminals with ncurses on the Windows OS.
  */
 
-#if __MINGW32__
+#if __MINGW32__ || defined(_MSC_VER)
 #ifndef _NC_MINGWH
 #define _NC_MINGWH
 
diff -ur ncurses-5.9-orig/include/term_entry.h ncurses-5.9/include/term_entry.h
--- ncurses-5.9-orig/include/term_entry.h	2009-07-11 12:52:29 -0400
+++ ncurses-5.9/include/term_entry.h	2013-07-04 18:38:37 -0400
@@ -161,8 +161,8 @@
 extern NCURSES_EXPORT(int) _nc_resolve_uses (bool); /* obs 20040705 */
 extern NCURSES_EXPORT(int) _nc_resolve_uses2 (bool, bool);
 extern NCURSES_EXPORT(void) _nc_free_entries (ENTRY *);
-extern NCURSES_IMPEXP void NCURSES_API (*_nc_check_termtype)(TERMTYPE *); /* obs 20040705 */
-extern NCURSES_IMPEXP void NCURSES_API (*_nc_check_termtype2)(TERMTYPE *, bool);
+extern NCURSES_IMPEXP void (NCURSES_API *_nc_check_termtype)(TERMTYPE *); /* obs 20040705 */
+extern NCURSES_IMPEXP void (NCURSES_API *_nc_check_termtype2)(TERMTYPE *, bool);
 
 /* trace_xnames.c */
 extern NCURSES_EXPORT(void) _nc_trace_xnames (TERMTYPE *);
diff -ur ncurses-5.9-orig/include/tic.h ncurses-5.9/include/tic.h
--- ncurses-5.9-orig/include/tic.h	2009-08-08 13:52:46 -0400
+++ ncurses-5.9/include/tic.h	2013-07-04 18:38:37 -0400
@@ -299,6 +299,9 @@
 
 /* home_terminfo.c */
 extern NCURSES_EXPORT(char *) _nc_home_terminfo (void);
+#ifdef _MSC_VER
+extern NCURSES_EXPORT(char *) _nc_win32_terminfo (void);
+#endif
 
 /* lib_tparm.c */
 #define NUM_PARM 9
@@ -318,6 +321,9 @@
     dbdTIC = 0,
 #if USE_DATABASE
     dbdEnvOnce,
+#ifdef _MSC_VER
+    dbdWin32,
+#endif
     dbdHome,
     dbdEnvList,
     dbdCfgList,
diff -ur ncurses-5.9-orig/menu/Makefile.in ncurses-5.9/menu/Makefile.in
--- ncurses-5.9-orig/menu/Makefile.in	2010-11-27 16:45:27 -0500
+++ ncurses-5.9/menu/Makefile.in	2013-07-04 18:38:37 -0400
@@ -84,7 +84,7 @@
 CPP		= @CPP@
 CFLAGS		= @CFLAGS@
 
-CPPFLAGS	= -I@top_srcdir@/ncurses -DHAVE_CONFIG_H @CPPFLAGS@
+CPPFLAGS	= -I@top_srcdir@/ncurses -DHAVE_CONFIG_H -DNCMENU_DLL @CPPFLAGS@
 
 CCFLAGS		= $(CPPFLAGS) $(CFLAGS)
 
diff -ur ncurses-5.9-orig/menu/m_attribs.c ncurses-5.9/menu/m_attribs.c
--- ncurses-5.9-orig/menu/m_attribs.c	2010-01-23 16:16:54 -0500
+++ ncurses-5.9/menu/m_attribs.c	2013-07-04 18:38:37 -0400
@@ -49,7 +49,7 @@
 
 /* "Template" macro to generate a function to set a menus attribute */
 #define GEN_MENU_ATTR_SET_FCT( name ) \
-NCURSES_IMPEXP int NCURSES_API set_menu_ ## name (MENU* menu, chtype attr) \
+NCMENU_IMPEXP int NCMENU_API set_menu_ ## name (MENU* menu, chtype attr) \
 {\
   T((T_CALLED("set_menu_" #name "(%p,%s)"), menu, _traceattr(attr))); \
    if (!(attr==A_NORMAL || (attr & A_ATTRIBUTES)==attr))\
@@ -65,7 +65,7 @@
 
 /* "Template" macro to generate a function to get a menu's attribute */
 #define GEN_MENU_ATTR_GET_FCT( name ) \
-NCURSES_IMPEXP chtype NCURSES_API menu_ ## name (const MENU * menu)\
+NCMENU_IMPEXP chtype NCMENU_API menu_ ## name (const MENU * menu)\
 {\
    T((T_CALLED("menu_" #name "(%p)"), (const void *) menu));\
    returnAttr(Normalize_Menu( menu ) -> name);\
diff -ur ncurses-5.9-orig/menu/m_cursor.c ncurses-5.9/menu/m_cursor.c
--- ncurses-5.9-orig/menu/m_cursor.c	2010-01-23 16:20:10 -0500
+++ ncurses-5.9/menu/m_cursor.c	2013-07-04 18:38:37 -0400
@@ -49,7 +49,7 @@
 |                    E_BAD_ARGUMENT  - invalid menu
 |                    E_NOT_POSTED    - Menu is not posted
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 _nc_menu_cursor_pos(const MENU * menu, const ITEM * item, int *pY, int *pX)
 {
   if (!menu || !pX || !pY)
@@ -79,7 +79,7 @@
 |                    E_BAD_ARGUMENT  - invalid menu
 |                    E_NOT_POSTED    - Menu is not posted
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 pos_menu_cursor(const MENU * menu)
 {
   WINDOW *win, *sub;
diff -ur ncurses-5.9-orig/menu/m_driver.c ncurses-5.9/menu/m_driver.c
--- ncurses-5.9-orig/menu/m_driver.c	2010-01-23 16:20:10 -0500
+++ ncurses-5.9/menu/m_driver.c	2013-07-04 18:38:37 -0400
@@ -114,7 +114,7 @@
 |   Return Values :  E_OK        - an item matching the pattern was found
 |                    E_NO_MATCH  - nothing found
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 _nc_Match_Next_Character_In_Item_Name
 (MENU * menu, int ch, ITEM ** item)
 {
@@ -208,7 +208,7 @@
 |                    E_BAD_STATE     - menu is in user hook routine
 |                    E_NOT_POSTED    - menu is not posted
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 menu_driver(MENU * menu, int c)
 {
 #define NAVIGATE(dir) \
diff -ur ncurses-5.9-orig/menu/m_format.c ncurses-5.9/menu/m_format.c
--- ncurses-5.9-orig/menu/m_format.c	2010-01-23 16:20:10 -0500
+++ ncurses-5.9/menu/m_format.c	2013-07-04 18:38:37 -0400
@@ -55,7 +55,7 @@
 |                    E_NOT_CONNECTED        - there are no items connected
 |                    E_POSTED               - the menu is already posted
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 set_menu_format(MENU * menu, int rows, int cols)
 {
   int total_rows, total_cols;
@@ -119,7 +119,7 @@
 |
 |   Return Values :  -
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void)
+NCMENU_EXPORT(void)
 menu_format(const MENU * menu, int *rows, int *cols)
 {
   if (rows)
diff -ur ncurses-5.9-orig/menu/m_global.c ncurses-5.9/menu/m_global.c
--- ncurses-5.9-orig/menu/m_global.c	2010-01-23 16:20:10 -0500
+++ ncurses-5.9/menu/m_global.c	2013-07-04 18:38:38 -0400
@@ -41,7 +41,7 @@
 
 static char mark[] = "-";
 /* *INDENT-OFF* */
-NCURSES_EXPORT_VAR(MENU) _nc_Default_Menu = {
+NCMENU_EXPORT_VAR(MENU) _nc_Default_Menu = {
   16,				  /* Nr. of chars high */
   1,				  /* Nr. of chars wide */
   16,				  /* Nr. of items high */
@@ -80,7 +80,7 @@
   0			          /* status */	    
 };
 
-NCURSES_EXPORT_VAR(ITEM) _nc_Default_Item = {
+NCMENU_EXPORT_VAR(ITEM) _nc_Default_Item = {
   { (char *)0, 0 },		  /* name */
   { (char *)0, 0 },		  /* description */
   (MENU *)0,		          /* Pointer to parent menu */
@@ -170,7 +170,7 @@
 |   Return Values :  TRUE       - successful connection
 |                    FALSE      - connection failed
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(bool)
+NCMENU_EXPORT(bool)
 _nc_Connect_Items(MENU * menu, ITEM ** items)
 {
   ITEM **item;
@@ -232,7 +232,7 @@
 |
 |   Return Values :  -
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void)
+NCMENU_EXPORT(void)
 _nc_Disconnect_Items(MENU * menu)
 {
   if (menu && menu->items)
@@ -247,7 +247,7 @@
 |
 |   Return Values :  the width
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 _nc_Calculate_Text_Width(const TEXT * item /*FIXME: limit length */ )
 {
 #if USE_WIDEC_SUPPORT
@@ -336,7 +336,7 @@
 |
 |   Return Values :  -
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void)
+NCMENU_EXPORT(void)
 _nc_Calculate_Item_Length_and_Width(MENU * menu)
 {
   int l;
@@ -375,7 +375,7 @@
 |
 |   Return Values :  -
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void)
+NCMENU_EXPORT(void)
 _nc_Link_Items(MENU * menu)
 {
   if (menu && menu->items && *(menu->items))
@@ -502,7 +502,7 @@
 |
 |   Return Values :  -
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void)
+NCMENU_EXPORT(void)
 _nc_Show_Menu(const MENU * menu)
 {
   WINDOW *win;
@@ -542,7 +542,7 @@
 |
 |   Return Values :  -
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void)
+NCMENU_EXPORT(void)
 _nc_New_TopRow_and_CurrentItem(
 				MENU * menu,
 				int new_toprow,
diff -ur ncurses-5.9-orig/menu/m_hook.c ncurses-5.9/menu/m_hook.c
--- ncurses-5.9-orig/menu/m_hook.c	2010-01-23 16:16:54 -0500
+++ ncurses-5.9/menu/m_hook.c	2013-07-04 18:38:38 -0400
@@ -41,7 +41,7 @@
 
 /* "Template" macro to generate function to set application specific hook */
 #define GEN_HOOK_SET_FUNCTION( typ, name ) \
-NCURSES_IMPEXP int NCURSES_API set_ ## typ ## _ ## name (MENU *menu, Menu_Hook func )\
+NCMENU_IMPEXP int NCMENU_API set_ ## typ ## _ ## name (MENU *menu, Menu_Hook func )\
 {\
    T((T_CALLED("set_" #typ "_" #name "(%p,%p)"), menu, func));\
    (Normalize_Menu(menu) -> typ ## name = func );\
@@ -50,7 +50,7 @@
 
 /* "Template" macro to generate function to get application specific hook */
 #define GEN_HOOK_GET_FUNCTION( typ, name ) \
-NCURSES_IMPEXP Menu_Hook NCURSES_API typ ## _ ## name ( const MENU *menu )\
+NCMENU_IMPEXP Menu_Hook NCMENU_API typ ## _ ## name ( const MENU *menu )\
 {\
    T((T_CALLED(#typ "_" #name "(%p)"), (const void *) menu));\
    returnMenuHook(Normalize_Menu(menu) -> typ ## name);\
diff -ur ncurses-5.9-orig/menu/m_item_cur.c ncurses-5.9/menu/m_item_cur.c
--- ncurses-5.9-orig/menu/m_item_cur.c	2010-01-23 16:20:10 -0500
+++ ncurses-5.9/menu/m_item_cur.c	2013-07-04 18:38:38 -0400
@@ -47,7 +47,7 @@
 |
 |   Return Values :  E_OK                - success
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 set_current_item(MENU * menu, ITEM * item)
 {
   T((T_CALLED("set_current_item(%p,%p)"), (void *)menu, (void *)item));
@@ -88,7 +88,7 @@
 |
 |   Return Values :  Item pointer or NULL if failure
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(ITEM *)
+NCMENU_EXPORT(ITEM *)
 current_item(const MENU * menu)
 {
   T((T_CALLED("current_item(%p)"), (const void *)menu));
@@ -103,7 +103,7 @@
 |
 |   Return Values :  The index or ERR if this is an invalid item pointer
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 item_index(const ITEM * item)
 {
   T((T_CALLED("item_index(%p)"), (const void *)item));
diff -ur ncurses-5.9-orig/menu/m_item_nam.c ncurses-5.9/menu/m_item_nam.c
--- ncurses-5.9-orig/menu/m_item_nam.c	2010-01-23 16:20:10 -0500
+++ ncurses-5.9/menu/m_item_nam.c	2013-07-04 18:38:38 -0400
@@ -47,7 +47,7 @@
 |
 |   Return Values :  See above; returns NULL if item is invalid
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(const char *)
+NCMENU_EXPORT(const char *)
 item_name(const ITEM * item)
 {
   T((T_CALLED("item_name(%p)"), (const void *)item));
@@ -62,7 +62,7 @@
 |
 |   Return Values :  See above; Returns NULL if item is invalid
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(const char *)
+NCMENU_EXPORT(const char *)
 item_description(const ITEM * item)
 {
   T((T_CALLED("item_description(%p)"), (const void *)item));
diff -ur ncurses-5.9-orig/menu/m_item_new.c ncurses-5.9/menu/m_item_new.c
--- ncurses-5.9-orig/menu/m_item_new.c	2010-01-23 16:20:11 -0500
+++ ncurses-5.9/menu/m_item_new.c	2013-07-04 18:38:38 -0400
@@ -106,7 +106,7 @@
 |
 |   Return Values :  The item pointer or NULL if creation failed.
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(ITEM *)
+NCMENU_EXPORT(ITEM *)
 new_item(const char *name, const char *description)
 {
   ITEM *item;
@@ -159,7 +159,7 @@
 |                    E_BAD_ARGUMENT    - invalid value has been passed
 |                    E_CONNECTED       - item is still connected to a menu    
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 free_item(ITEM * item)
 {
   T((T_CALLED("free_item(%p)"), (void *)item));
@@ -192,7 +192,7 @@
 |                    E_BAD_ARGUMENT     - an invalid value has been passed
 |                    E_SYSTEM_ERROR     - no memory to store mark
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 set_menu_mark(MENU * menu, const char *mark)
 {
   unsigned l;
@@ -265,7 +265,7 @@
 |
 |   Return Values :  The marker string pointer or NULL if no marker defined
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(const char *)
+NCMENU_EXPORT(const char *)
 menu_mark(const MENU * menu)
 {
   T((T_CALLED("menu_mark(%p)"), (const void *)menu));
diff -ur ncurses-5.9-orig/menu/m_item_opt.c ncurses-5.9/menu/m_item_opt.c
--- ncurses-5.9-orig/menu/m_item_opt.c	2010-01-23 16:20:10 -0500
+++ ncurses-5.9/menu/m_item_opt.c	2013-07-04 18:38:38 -0400
@@ -50,7 +50,7 @@
 |   Return Values :  E_OK            - success
 |                    E_BAD_ARGUMENT  - invalid item options
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 set_item_opts(ITEM * item, Item_Options opts)
 {
   T((T_CALLED("set_menu_opts(%p,%d)"), (void *)item, opts));
@@ -93,7 +93,7 @@
 |   Return Values :  E_OK            - success
 |                    E_BAD_ARGUMENT  - invalid options
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 item_opts_off(ITEM * item, Item_Options opts)
 {
   ITEM *citem = item;		/* use a copy because set_item_opts must detect
@@ -121,7 +121,7 @@
 |   Return Values :  E_OK            - success
 |                    E_BAD_ARGUMENT  - invalid options
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 item_opts_on(ITEM * item, Item_Options opts)
 {
   ITEM *citem = item;		/* use a copy because set_item_opts must detect
@@ -149,7 +149,7 @@
 |
 |   Return Values :  Items options
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(Item_Options)
+NCMENU_EXPORT(Item_Options)
 item_opts(const ITEM * item)
 {
   T((T_CALLED("item_opts(%p)"), (const void *)item));
diff -ur ncurses-5.9-orig/menu/m_item_top.c ncurses-5.9/menu/m_item_top.c
--- ncurses-5.9-orig/menu/m_item_top.c	2010-01-23 16:20:10 -0500
+++ ncurses-5.9/menu/m_item_top.c	2013-07-04 18:38:38 -0400
@@ -49,7 +49,7 @@
 |                    E_BAD_ARGUMENT   - not a menu pointer or invalid row
 |                    E_NOT_CONNECTED  - there are no items for the menu
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 set_top_row(MENU * menu, int row)
 {
   ITEM *item;
@@ -91,7 +91,7 @@
 |
 |   Return Values :  The row number or ERR if there is no row
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 top_row(const MENU * menu)
 {
   T((T_CALLED("top_row(%p)"), (const void *)menu));
diff -ur ncurses-5.9-orig/menu/m_item_use.c ncurses-5.9/menu/m_item_use.c
--- ncurses-5.9-orig/menu/m_item_use.c	2010-01-23 16:20:10 -0500
+++ ncurses-5.9/menu/m_item_use.c	2013-07-04 18:38:38 -0400
@@ -48,7 +48,7 @@
 |
 |   Return Values :  E_OK               - success
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 set_item_userptr(ITEM * item, void *userptr)
 {
   T((T_CALLED("set_item_userptr(%p,%p)"), (void *)item, (void *)userptr));
@@ -66,7 +66,7 @@
 |   Return Values :  Value of the pointer. If no such pointer has been set,
 |                    NULL is returned.
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void *)
+NCMENU_EXPORT(void *)
 item_userptr(const ITEM * item)
 {
   T((T_CALLED("item_userptr(%p)"), (const void *)item));
diff -ur ncurses-5.9-orig/menu/m_item_val.c ncurses-5.9/menu/m_item_val.c
--- ncurses-5.9-orig/menu/m_item_val.c	2010-01-23 16:20:10 -0500
+++ ncurses-5.9/menu/m_item_val.c	2013-07-04 18:38:38 -0400
@@ -52,7 +52,7 @@
 |   Return Values :  E_OK              - success
 |                    E_REQUEST_DENIED  - not selectable or single valued menu
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 set_item_value(ITEM * item, bool value)
 {
   MENU *menu;
@@ -94,7 +94,7 @@
 |   Return Values :  TRUE   - if item is selected
 |                    FALSE  - if item is not selected
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(bool)
+NCMENU_EXPORT(bool)
 item_value(const ITEM * item)
 {
   T((T_CALLED("item_value(%p)"), (const void *)item));
diff -ur ncurses-5.9-orig/menu/m_item_vis.c ncurses-5.9/menu/m_item_vis.c
--- ncurses-5.9-orig/menu/m_item_vis.c	2010-01-23 16:20:10 -0500
+++ ncurses-5.9/menu/m_item_vis.c	2013-07-04 18:38:38 -0400
@@ -49,7 +49,7 @@
 |   Return Values :  TRUE  if visible
 |                    FALSE if invisible
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(bool)
+NCMENU_EXPORT(bool)
 item_visible(const ITEM * item)
 {
   MENU *menu;
diff -ur ncurses-5.9-orig/menu/m_items.c ncurses-5.9/menu/m_items.c
--- ncurses-5.9-orig/menu/m_items.c	2010-01-23 16:20:10 -0500
+++ ncurses-5.9/menu/m_items.c	2013-07-04 18:38:38 -0400
@@ -52,7 +52,7 @@
 |                    E_BAD_ARGUMENT - An incorrect menu or item array was
 |                                     passed to the function
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 set_menu_items(MENU * menu, ITEM ** items)
 {
   T((T_CALLED("set_menu_items(%p,%p)"), (void *)menu, (void *)items));
@@ -84,7 +84,7 @@
 |
 |   Return Values :  NULL on error
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(ITEM **)
+NCMENU_EXPORT(ITEM **)
 menu_items(const MENU * menu)
 {
   T((T_CALLED("menu_items(%p)"), (const void *)menu));
@@ -100,7 +100,7 @@
 |
 |   Return Values :  Number of items or -1 to indicate error.
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 item_count(const MENU * menu)
 {
   T((T_CALLED("item_count(%p)"), (const void *)menu));
diff -ur ncurses-5.9-orig/menu/m_new.c ncurses-5.9/menu/m_new.c
--- ncurses-5.9-orig/menu/m_new.c	2010-01-23 16:20:11 -0500
+++ ncurses-5.9/menu/m_new.c	2013-07-04 18:38:38 -0400
@@ -50,7 +50,7 @@
 |
 |   Return Values :  NULL on error
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(MENU *)
+NCMENU_EXPORT(MENU *)
 NCURSES_SP_NAME(new_menu) (NCURSES_SP_DCLx ITEM ** items)
 {
   int err = E_SYSTEM_ERROR;
@@ -101,7 +101,7 @@
 |   Return Values :  NULL on error
 +--------------------------------------------------------------------------*/
 #if NCURSES_SP_FUNCS
-NCURSES_EXPORT(MENU *)
+NCMENU_EXPORT(MENU *)
 new_menu(ITEM ** items)
 {
   return NCURSES_SP_NAME(new_menu) (CURRENT_SCREEN, items);
@@ -119,7 +119,7 @@
 |                    E_BAD_ARGUMENT     - Invalid menu pointer passed
 |                    E_POSTED           - Menu is already posted
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 free_menu(MENU * menu)
 {
   T((T_CALLED("free_menu(%p)"), (void *)menu));
diff -ur ncurses-5.9-orig/menu/m_opts.c ncurses-5.9/menu/m_opts.c
--- ncurses-5.9-orig/menu/m_opts.c	2010-01-23 16:20:10 -0500
+++ ncurses-5.9/menu/m_opts.c	2013-07-04 18:38:38 -0400
@@ -52,7 +52,7 @@
 |                    E_BAD_ARGUMENT - invalid menu options
 |                    E_POSTED       - menu is already posted
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 set_menu_opts(MENU * menu, Menu_Options opts)
 {
   T((T_CALLED("set_menu_opts(%p,%d)"), (void *)menu, opts));
@@ -112,7 +112,7 @@
 |                    E_BAD_ARGUMENT - invalid options
 |                    E_POSTED       - menu is already posted
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 menu_opts_off(MENU * menu, Menu_Options opts)
 {
   MENU *cmenu = menu;		/* use a copy because set_menu_opts must detect
@@ -145,7 +145,7 @@
 |                    E_BAD_ARGUMENT - invalid menu options
 |                    E_POSTED       - menu is already posted
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 menu_opts_on(MENU * menu, Menu_Options opts)
 {
   MENU *cmenu = menu;		/* use a copy because set_menu_opts must detect
@@ -173,7 +173,7 @@
 |
 |   Return Values :  Menu options
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(Menu_Options)
+NCMENU_EXPORT(Menu_Options)
 menu_opts(const MENU * menu)
 {
   T((T_CALLED("menu_opts(%p)"), (const void *)menu));
diff -ur ncurses-5.9-orig/menu/m_pad.c ncurses-5.9/menu/m_pad.c
--- ncurses-5.9-orig/menu/m_pad.c	2010-01-23 16:20:10 -0500
+++ ncurses-5.9/menu/m_pad.c	2013-07-04 18:38:38 -0400
@@ -58,7 +58,7 @@
 |   Return Values :  E_OK              - success
 |                    E_BAD_ARGUMENT    - an invalid value has been passed
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 set_menu_pad(MENU * menu, int pad)
 {
   bool do_refresh = (menu != (MENU *) 0);
@@ -85,7 +85,7 @@
 |
 |   Return Values :  The pad character
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 menu_pad(const MENU * menu)
 {
   T((T_CALLED("menu_pad(%p)"), (const void *)menu));
diff -ur ncurses-5.9-orig/menu/m_pattern.c ncurses-5.9/menu/m_pattern.c
--- ncurses-5.9-orig/menu/m_pattern.c	2010-01-23 16:20:10 -0500
+++ ncurses-5.9/menu/m_pattern.c	2013-07-04 18:38:38 -0400
@@ -50,7 +50,7 @@
 |                                    pattern is stored
 |                    PatternString - as expected
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(char *)
+NCMENU_EXPORT(char *)
 menu_pattern(const MENU * menu)
 {
   static char empty[] = "";
@@ -72,7 +72,7 @@
 |                    E_NOT_CONNECTED   - no items connected to menu
 |                    E_NO_MATCH        - no item matches pattern
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 set_menu_pattern(MENU * menu, const char *p)
 {
   ITEM *matchitem;
diff -ur ncurses-5.9-orig/menu/m_post.c ncurses-5.9/menu/m_post.c
--- ncurses-5.9-orig/menu/m_post.c	2010-05-01 15:18:27 -0400
+++ ncurses-5.9/menu/m_post.c	2013-07-04 18:38:38 -0400
@@ -48,7 +48,7 @@
 |
 |   Return Values :  -
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void)
+NCMENU_EXPORT(void)
 _nc_Post_Item(const MENU * menu, const ITEM * item)
 {
   int i;
@@ -196,7 +196,7 @@
 |
 |   Return Values :  -
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void)
+NCMENU_EXPORT(void)
 _nc_Draw_Menu(const MENU * menu)
 {
   ITEM *item = menu->items[0];
@@ -266,7 +266,7 @@
 |                    E_BAD_STATE         - Menu in userexit routine
 |                    E_POSTED            - Menu already posted
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 post_menu(MENU * menu)
 {
   T((T_CALLED("post_menu(%p)"), (void *)menu));
@@ -338,7 +338,7 @@
 |                    E_BAD_STATE       - menu in userexit routine
 |                    E_NOT_POSTED      - menu is not posted
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 unpost_menu(MENU * menu)
 {
   WINDOW *win;
diff -ur ncurses-5.9-orig/menu/m_req_name.c ncurses-5.9/menu/m_req_name.c
--- ncurses-5.9-orig/menu/m_req_name.c	2009-10-10 12:17:23 -0400
+++ ncurses-5.9/menu/m_req_name.c	2013-07-04 18:38:38 -0400
@@ -71,7 +71,7 @@
 |   Return Values :  Pointer to name      - on success
 |                    NULL                 - on invalid request code
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(const char *)
+NCMENU_EXPORT(const char *)
 menu_request_name(int request)
 {
   T((T_CALLED("menu_request_name(%d)"), request));
@@ -93,7 +93,7 @@
 |   Return Values :  Request Id       - on success
 |                    E_NO_MATCH       - request not found
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 menu_request_by_name(const char *str)
 {
   /* because the table is so small, it doesn't really hurt
diff -ur ncurses-5.9-orig/menu/m_scale.c ncurses-5.9/menu/m_scale.c
--- ncurses-5.9-orig/menu/m_scale.c	2010-01-23 16:20:10 -0500
+++ ncurses-5.9/menu/m_scale.c	2013-07-04 18:38:38 -0400
@@ -50,7 +50,7 @@
 |                    E_BAD_ARGUMENT        - invalid menu pointer
 |                    E_NOT_CONNECTED       - no items are connected to menu
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 scale_menu(const MENU * menu, int *rows, int *cols)
 {
   T((T_CALLED("scale_menu(%p,%p,%p)"),
diff -ur ncurses-5.9-orig/menu/m_spacing.c ncurses-5.9/menu/m_spacing.c
--- ncurses-5.9-orig/menu/m_spacing.c	2010-01-23 16:20:10 -0500
+++ ncurses-5.9/menu/m_spacing.c	2013-07-04 18:38:38 -0400
@@ -51,7 +51,7 @@
 |
 |   Return Values :  E_OK                 - on success
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 set_menu_spacing(MENU * menu, int s_desc, int s_row, int s_col)
 {
   MENU *m;			/* split for ATAC workaround */
@@ -86,7 +86,7 @@
 |
 |   Return Values :  E_OK             - on success
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 menu_spacing(const MENU * menu, int *s_desc, int *s_row, int *s_col)
 {
   const MENU *m;		/* split for ATAC workaround */
diff -ur ncurses-5.9-orig/menu/m_sub.c ncurses-5.9/menu/m_sub.c
--- ncurses-5.9-orig/menu/m_sub.c	2010-01-23 16:20:11 -0500
+++ ncurses-5.9/menu/m_sub.c	2013-07-04 18:38:38 -0400
@@ -48,7 +48,7 @@
 |   Return Values :  E_OK           - success
 |                    E_POSTED       - menu is already posted
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 set_menu_sub(MENU * menu, WINDOW *win)
 {
   T((T_CALLED("set_menu_sub(%p,%p)"), (void *)menu, (void *)win));
@@ -88,7 +88,7 @@
 |
 |   Return Values :  NULL on error, otherwise a pointer to the window
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(WINDOW *)
+NCMENU_EXPORT(WINDOW *)
 menu_sub(const MENU * menu)
 {
   const MENU *m = Normalize_Menu(menu);
diff -ur ncurses-5.9-orig/menu/m_trace.c ncurses-5.9/menu/m_trace.c
--- ncurses-5.9-orig/menu/m_trace.c	2010-01-23 16:20:10 -0500
+++ ncurses-5.9/menu/m_trace.c	2013-07-04 18:38:38 -0400
@@ -34,42 +34,42 @@
 
 MODULE_ID("$Id: m_trace.c,v 1.4 2010/01/23 21:20:10 tom Exp $")
 
-NCURSES_EXPORT(ITEM *)
+NCMENU_EXPORT(ITEM *)
 _nc_retrace_item(ITEM * code)
 {
   T((T_RETURN("%p"), (void *)code));
   return code;
 }
 
-NCURSES_EXPORT(ITEM **)
+NCMENU_EXPORT(ITEM **)
 _nc_retrace_item_ptr(ITEM ** code)
 {
   T((T_RETURN("%p"), (void *)code));
   return code;
 }
 
-NCURSES_EXPORT(Item_Options)
+NCMENU_EXPORT(Item_Options)
 _nc_retrace_item_opts(Item_Options code)
 {
   T((T_RETURN("%d"), code));
   return code;
 }
 
-NCURSES_EXPORT(MENU *)
+NCMENU_EXPORT(MENU *)
 _nc_retrace_menu(MENU * code)
 {
   T((T_RETURN("%p"), (void *)code));
   return code;
 }
 
-NCURSES_EXPORT(Menu_Hook)
+NCMENU_EXPORT(Menu_Hook)
 _nc_retrace_menu_hook(Menu_Hook code)
 {
   T((T_RETURN("%p"), code));
   return code;
 }
 
-NCURSES_EXPORT(Menu_Options)
+NCMENU_EXPORT(Menu_Options)
 _nc_retrace_menu_opts(Menu_Options code)
 {
   T((T_RETURN("%d"), code));
diff -ur ncurses-5.9-orig/menu/m_userptr.c ncurses-5.9/menu/m_userptr.c
--- ncurses-5.9-orig/menu/m_userptr.c	2010-01-23 16:20:10 -0500
+++ ncurses-5.9/menu/m_userptr.c	2013-07-04 18:38:38 -0400
@@ -48,7 +48,7 @@
 |
 |   Return Values :  E_OK         - success
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 set_menu_userptr(MENU * menu, void *userptr)
 {
   T((T_CALLED("set_menu_userptr(%p,%p)"), (void *)menu, (void *)userptr));
@@ -66,7 +66,7 @@
 |   Return Values :  Value of the pointer. If no such pointer has been set,
 |                    NULL is returned
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(void *)
+NCMENU_EXPORT(void *)
 menu_userptr(const MENU * menu)
 {
   T((T_CALLED("menu_userptr(%p)"), (const void *)menu));
diff -ur ncurses-5.9-orig/menu/m_win.c ncurses-5.9/menu/m_win.c
--- ncurses-5.9-orig/menu/m_win.c	2010-01-23 16:20:11 -0500
+++ ncurses-5.9/menu/m_win.c	2013-07-04 18:38:38 -0400
@@ -48,7 +48,7 @@
 |   Return Values :  E_OK               - success
 |                    E_POSTED           - menu is already posted
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(int)
+NCMENU_EXPORT(int)
 set_menu_win(MENU * menu, WINDOW *win)
 {
   T((T_CALLED("set_menu_win(%p,%p)"), (void *)menu, (void *)win));
@@ -88,7 +88,7 @@
 |
 |   Return Values :  NULL on error, otherwise pointer to window
 +--------------------------------------------------------------------------*/
-NCURSES_EXPORT(WINDOW *)
+NCMENU_EXPORT(WINDOW *)
 menu_win(const MENU * menu)
 {
   const MENU *m = Normalize_Menu(menu);
diff -ur ncurses-5.9-orig/menu/menu.h ncurses-5.9/menu/menu.h
--- ncurses-5.9-orig/menu/menu.h	2009-04-04 20:28:07 -0400
+++ ncurses-5.9/menu/menu.h	2013-07-04 18:38:38 -0400
@@ -172,85 +172,85 @@
 
 /* --------- prototypes for libmenu functions ----------------------------- */
 
-extern NCURSES_EXPORT(ITEM **)	menu_items (const MENU *);
-extern NCURSES_EXPORT(ITEM *)	current_item (const MENU *);
-extern NCURSES_EXPORT(ITEM *)	new_item (const char *,const char *);
-
-extern NCURSES_EXPORT(MENU *)	new_menu (ITEM **);
-
-extern NCURSES_EXPORT(Item_Options)	item_opts (const ITEM *);
-extern NCURSES_EXPORT(Menu_Options)	menu_opts (const MENU *);
-
-extern NCURSES_EXPORT(Menu_Hook)	item_init (const MENU *);
-extern NCURSES_EXPORT(Menu_Hook)	item_term (const MENU *);
-extern NCURSES_EXPORT(Menu_Hook)	menu_init (const MENU *);
-extern NCURSES_EXPORT(Menu_Hook)	menu_term (const MENU *);
-
-extern NCURSES_EXPORT(WINDOW *)	menu_sub (const MENU *);
-extern NCURSES_EXPORT(WINDOW *)	menu_win (const MENU *);
-
-extern NCURSES_EXPORT(const char *)	item_description (const ITEM *);
-extern NCURSES_EXPORT(const char *)	item_name (const ITEM *);
-extern NCURSES_EXPORT(const char *)	menu_mark (const MENU *);
-extern NCURSES_EXPORT(const char *)	menu_request_name (int);
-
-extern NCURSES_EXPORT(char *)	menu_pattern (const MENU *);
-
-extern NCURSES_EXPORT(void *)	menu_userptr (const MENU *);
-extern NCURSES_EXPORT(void *)	item_userptr (const ITEM *);
-
-extern NCURSES_EXPORT(chtype)	menu_back (const MENU *);
-extern NCURSES_EXPORT(chtype)	menu_fore (const MENU *);
-extern NCURSES_EXPORT(chtype)	menu_grey (const MENU *);
-
-extern NCURSES_EXPORT(int)	free_item (ITEM *);
-extern NCURSES_EXPORT(int)	free_menu (MENU *);
-extern NCURSES_EXPORT(int)	item_count (const MENU *);
-extern NCURSES_EXPORT(int)	item_index (const ITEM *);
-extern NCURSES_EXPORT(int)	item_opts_off (ITEM *,Item_Options);
-extern NCURSES_EXPORT(int)	item_opts_on (ITEM *,Item_Options);
-extern NCURSES_EXPORT(int)	menu_driver (MENU *,int);
-extern NCURSES_EXPORT(int)	menu_opts_off (MENU *,Menu_Options);
-extern NCURSES_EXPORT(int)	menu_opts_on (MENU *,Menu_Options);
-extern NCURSES_EXPORT(int)	menu_pad (const MENU *);
-extern NCURSES_EXPORT(int)	pos_menu_cursor (const MENU *);
-extern NCURSES_EXPORT(int)	post_menu (MENU *);
-extern NCURSES_EXPORT(int)	scale_menu (const MENU *,int *,int *);
-extern NCURSES_EXPORT(int)	set_current_item (MENU *menu,ITEM *item);
-extern NCURSES_EXPORT(int)	set_item_init (MENU *, Menu_Hook);
-extern NCURSES_EXPORT(int)	set_item_opts (ITEM *,Item_Options);
-extern NCURSES_EXPORT(int)	set_item_term (MENU *, Menu_Hook);
-extern NCURSES_EXPORT(int)	set_item_userptr (ITEM *, void *);
-extern NCURSES_EXPORT(int)	set_item_value (ITEM *,bool);
-extern NCURSES_EXPORT(int)	set_menu_back (MENU *,chtype);
-extern NCURSES_EXPORT(int)	set_menu_fore (MENU *,chtype);
-extern NCURSES_EXPORT(int)	set_menu_format (MENU *,int,int);
-extern NCURSES_EXPORT(int)	set_menu_grey (MENU *,chtype);
-extern NCURSES_EXPORT(int)	set_menu_init (MENU *, Menu_Hook);
-extern NCURSES_EXPORT(int)	set_menu_items (MENU *,ITEM **);
-extern NCURSES_EXPORT(int)	set_menu_mark (MENU *, const char *);
-extern NCURSES_EXPORT(int)	set_menu_opts (MENU *,Menu_Options);
-extern NCURSES_EXPORT(int)	set_menu_pad (MENU *,int);
-extern NCURSES_EXPORT(int)	set_menu_pattern (MENU *,const char *);
-extern NCURSES_EXPORT(int)	set_menu_sub (MENU *,WINDOW *);
-extern NCURSES_EXPORT(int)	set_menu_term (MENU *, Menu_Hook);
-extern NCURSES_EXPORT(int)	set_menu_userptr (MENU *,void *);
-extern NCURSES_EXPORT(int)	set_menu_win (MENU *,WINDOW *);
-extern NCURSES_EXPORT(int)	set_top_row (MENU *,int);
-extern NCURSES_EXPORT(int)	top_row (const MENU *);
-extern NCURSES_EXPORT(int)	unpost_menu (MENU *);
-extern NCURSES_EXPORT(int)	menu_request_by_name (const char *);
-extern NCURSES_EXPORT(int)	set_menu_spacing (MENU *,int,int,int);
-extern NCURSES_EXPORT(int)	menu_spacing (const MENU *,int *,int *,int *);
+extern NCMENU_EXPORT(ITEM **)	menu_items (const MENU *);
+extern NCMENU_EXPORT(ITEM *)	current_item (const MENU *);
+extern NCMENU_EXPORT(ITEM *)	new_item (const char *,const char *);
+
+extern NCMENU_EXPORT(MENU *)	new_menu (ITEM **);
+
+extern NCMENU_EXPORT(Item_Options)	item_opts (const ITEM *);
+extern NCMENU_EXPORT(Menu_Options)	menu_opts (const MENU *);
+
+extern NCMENU_EXPORT(Menu_Hook)	item_init (const MENU *);
+extern NCMENU_EXPORT(Menu_Hook)	item_term (const MENU *);
+extern NCMENU_EXPORT(Menu_Hook)	menu_init (const MENU *);
+extern NCMENU_EXPORT(Menu_Hook)	menu_term (const MENU *);
+
+extern NCMENU_EXPORT(WINDOW *)	menu_sub (const MENU *);
+extern NCMENU_EXPORT(WINDOW *)	menu_win (const MENU *);
+
+extern NCMENU_EXPORT(const char *)	item_description (const ITEM *);
+extern NCMENU_EXPORT(const char *)	item_name (const ITEM *);
+extern NCMENU_EXPORT(const char *)	menu_mark (const MENU *);
+extern NCMENU_EXPORT(const char *)	menu_request_name (int);
+
+extern NCMENU_EXPORT(char *)	menu_pattern (const MENU *);
+
+extern NCMENU_EXPORT(void *)	menu_userptr (const MENU *);
+extern NCMENU_EXPORT(void *)	item_userptr (const ITEM *);
+
+extern NCMENU_EXPORT(chtype)	menu_back (const MENU *);
+extern NCMENU_EXPORT(chtype)	menu_fore (const MENU *);
+extern NCMENU_EXPORT(chtype)	menu_grey (const MENU *);
+
+extern NCMENU_EXPORT(int)	free_item (ITEM *);
+extern NCMENU_EXPORT(int)	free_menu (MENU *);
+extern NCMENU_EXPORT(int)	item_count (const MENU *);
+extern NCMENU_EXPORT(int)	item_index (const ITEM *);
+extern NCMENU_EXPORT(int)	item_opts_off (ITEM *,Item_Options);
+extern NCMENU_EXPORT(int)	item_opts_on (ITEM *,Item_Options);
+extern NCMENU_EXPORT(int)	menu_driver (MENU *,int);
+extern NCMENU_EXPORT(int)	menu_opts_off (MENU *,Menu_Options);
+extern NCMENU_EXPORT(int)	menu_opts_on (MENU *,Menu_Options);
+extern NCMENU_EXPORT(int)	menu_pad (const MENU *);
+extern NCMENU_EXPORT(int)	pos_menu_cursor (const MENU *);
+extern NCMENU_EXPORT(int)	post_menu (MENU *);
+extern NCMENU_EXPORT(int)	scale_menu (const MENU *,int *,int *);
+extern NCMENU_EXPORT(int)	set_current_item (MENU *menu,ITEM *item);
+extern NCMENU_EXPORT(int)	set_item_init (MENU *, Menu_Hook);
+extern NCMENU_EXPORT(int)	set_item_opts (ITEM *,Item_Options);
+extern NCMENU_EXPORT(int)	set_item_term (MENU *, Menu_Hook);
+extern NCMENU_EXPORT(int)	set_item_userptr (ITEM *, void *);
+extern NCMENU_EXPORT(int)	set_item_value (ITEM *,bool);
+extern NCMENU_EXPORT(int)	set_menu_back (MENU *,chtype);
+extern NCMENU_EXPORT(int)	set_menu_fore (MENU *,chtype);
+extern NCMENU_EXPORT(int)	set_menu_format (MENU *,int,int);
+extern NCMENU_EXPORT(int)	set_menu_grey (MENU *,chtype);
+extern NCMENU_EXPORT(int)	set_menu_init (MENU *, Menu_Hook);
+extern NCMENU_EXPORT(int)	set_menu_items (MENU *,ITEM **);
+extern NCMENU_EXPORT(int)	set_menu_mark (MENU *, const char *);
+extern NCMENU_EXPORT(int)	set_menu_opts (MENU *,Menu_Options);
+extern NCMENU_EXPORT(int)	set_menu_pad (MENU *,int);
+extern NCMENU_EXPORT(int)	set_menu_pattern (MENU *,const char *);
+extern NCMENU_EXPORT(int)	set_menu_sub (MENU *,WINDOW *);
+extern NCMENU_EXPORT(int)	set_menu_term (MENU *, Menu_Hook);
+extern NCMENU_EXPORT(int)	set_menu_userptr (MENU *,void *);
+extern NCMENU_EXPORT(int)	set_menu_win (MENU *,WINDOW *);
+extern NCMENU_EXPORT(int)	set_top_row (MENU *,int);
+extern NCMENU_EXPORT(int)	top_row (const MENU *);
+extern NCMENU_EXPORT(int)	unpost_menu (MENU *);
+extern NCMENU_EXPORT(int)	menu_request_by_name (const char *);
+extern NCMENU_EXPORT(int)	set_menu_spacing (MENU *,int,int,int);
+extern NCMENU_EXPORT(int)	menu_spacing (const MENU *,int *,int *,int *);
 
 
-extern NCURSES_EXPORT(bool)	item_value (const ITEM *);
-extern NCURSES_EXPORT(bool)	item_visible (const ITEM *);
+extern NCMENU_EXPORT(bool)	item_value (const ITEM *);
+extern NCMENU_EXPORT(bool)	item_visible (const ITEM *);
 
-extern NCURSES_EXPORT(void)	menu_format (const MENU *,int *,int *);
+extern NCMENU_EXPORT(void)	menu_format (const MENU *,int *,int *);
 
 #if NCURSES_SP_FUNCS
-extern NCURSES_EXPORT(MENU *)	NCURSES_SP_NAME(new_menu) (SCREEN*, ITEM **);
+extern NCMENU_EXPORT(MENU *)	NCURSES_SP_NAME(new_menu) (SCREEN*, ITEM **);
 #endif
 
 #ifdef __cplusplus
diff -ur ncurses-5.9-orig/menu/menu.priv.h ncurses-5.9/menu/menu.priv.h
--- ncurses-5.9-orig/menu/menu.priv.h	2009-02-28 16:02:57 -0500
+++ ncurses-5.9/menu/menu.priv.h	2013-07-04 18:38:38 -0400
@@ -47,8 +47,8 @@
 /* Backspace code */
 #define BS (8)
 
-extern NCURSES_EXPORT_VAR(ITEM) _nc_Default_Item;
-extern NCURSES_EXPORT_VAR(MENU) _nc_Default_Menu;
+extern NCMENU_EXPORT_VAR(ITEM) _nc_Default_Item;
+extern NCMENU_EXPORT_VAR(MENU) _nc_Default_Menu;
 
 /* Normalize item to default if none was given */
 #define Normalize_Item( item ) ((item)=(item)?(item):&_nc_Default_Item)
@@ -113,17 +113,17 @@
 #define UChar(c)	((unsigned char)(c))
 
 /* Internal functions. */
-extern NCURSES_EXPORT(void) _nc_Draw_Menu (const MENU *);
-extern NCURSES_EXPORT(void) _nc_Show_Menu (const MENU *);
-extern NCURSES_EXPORT(void) _nc_Calculate_Item_Length_and_Width (MENU *);
-extern NCURSES_EXPORT(int)  _nc_Calculate_Text_Width(const TEXT *);
-extern NCURSES_EXPORT(void) _nc_Post_Item (const MENU *, const ITEM *);
-extern NCURSES_EXPORT(bool) _nc_Connect_Items (MENU *, ITEM **);
-extern NCURSES_EXPORT(void) _nc_Disconnect_Items (MENU *);
-extern NCURSES_EXPORT(void) _nc_New_TopRow_and_CurrentItem (MENU *,int, ITEM *);
-extern NCURSES_EXPORT(void) _nc_Link_Items (MENU *);
-extern NCURSES_EXPORT(int)  _nc_Match_Next_Character_In_Item_Name (MENU*,int,ITEM**);
-extern NCURSES_EXPORT(int)  _nc_menu_cursor_pos (const MENU* menu, const ITEM* item,
+extern NCMENU_EXPORT(void) _nc_Draw_Menu (const MENU *);
+extern NCMENU_EXPORT(void) _nc_Show_Menu (const MENU *);
+extern NCMENU_EXPORT(void) _nc_Calculate_Item_Length_and_Width (MENU *);
+extern NCMENU_EXPORT(int)  _nc_Calculate_Text_Width(const TEXT *);
+extern NCMENU_EXPORT(void) _nc_Post_Item (const MENU *, const ITEM *);
+extern NCMENU_EXPORT(bool) _nc_Connect_Items (MENU *, ITEM **);
+extern NCMENU_EXPORT(void) _nc_Disconnect_Items (MENU *);
+extern NCMENU_EXPORT(void) _nc_New_TopRow_and_CurrentItem (MENU *,int, ITEM *);
+extern NCMENU_EXPORT(void) _nc_Link_Items (MENU *);
+extern NCMENU_EXPORT(int)  _nc_Match_Next_Character_In_Item_Name (MENU*,int,ITEM**);
+extern NCMENU_EXPORT(int)  _nc_menu_cursor_pos (const MENU* menu, const ITEM* item,
 				int* pY, int* pX);
 
 #ifdef TRACE
@@ -135,12 +135,12 @@
 #define returnMenuHook(code)	TRACE_RETURN(code,menu_hook)
 #define returnMenuOpts(code)	TRACE_RETURN(code,menu_opts)
 
-extern NCURSES_EXPORT(ITEM *)	    _nc_retrace_item (ITEM *);
-extern NCURSES_EXPORT(ITEM **)	    _nc_retrace_item_ptr (ITEM **);
-extern NCURSES_EXPORT(Item_Options) _nc_retrace_item_opts (Item_Options);
-extern NCURSES_EXPORT(MENU *)	    _nc_retrace_menu (MENU *);
-extern NCURSES_EXPORT(Menu_Hook)    _nc_retrace_menu_hook (Menu_Hook);
-extern NCURSES_EXPORT(Menu_Options) _nc_retrace_menu_opts (Menu_Options);
+extern NCMENU_EXPORT(ITEM *)	    _nc_retrace_item (ITEM *);
+extern NCMENU_EXPORT(ITEM **)	    _nc_retrace_item_ptr (ITEM **);
+extern NCMENU_EXPORT(Item_Options) _nc_retrace_item_opts (Item_Options);
+extern NCMENU_EXPORT(MENU *)	    _nc_retrace_menu (MENU *);
+extern NCMENU_EXPORT(Menu_Hook)    _nc_retrace_menu_hook (Menu_Hook);
+extern NCMENU_EXPORT(Menu_Options) _nc_retrace_menu_opts (Menu_Options);
 
 #else /* !TRACE */
 
diff -ur ncurses-5.9-orig/mk-1st.awk ncurses-5.9/mk-1st.awk
--- ncurses-5.9-orig/mk-1st.awk	2010-08-07 16:42:30 -0400
+++ ncurses-5.9/mk-1st.awk	2013-07-04 18:38:38 -0400
@@ -396,11 +396,11 @@
 				end_name = lib_name;
 				printf "../lib/%s : $(%s_OBJS)\n", lib_name, OBJS
 				if ( is_ticlib() ) {
-					printf "\tcd ../lib && $(LIBTOOL_LINK) $(%s) -o %s $(%s_OBJS:$o=.lo) -rpath $(DESTDIR)$(libdir) %s $(NCURSES_MAJOR):$(NCURSES_MINOR) $(LT_UNDEF) $(TICS_LIST)\n", compile, lib_name, OBJS, libtool_version
+					printf "\tcd ../lib && $(LIBTOOL_LINK) $(%s) -shared -o %s $(%s_OBJS:$o=.lo) -rpath $(DESTDIR)$(libdir) %s $(NCURSES_MAJOR):$(NCURSES_MINOR) $(LT_UNDEF) $(TICS_LIST)\n", compile, lib_name, OBJS, libtool_version
 				} else if ( is_termlib() ) {
-					printf "\tcd ../lib && $(LIBTOOL_LINK) $(%s) -o %s $(%s_OBJS:$o=.lo) -rpath $(DESTDIR)$(libdir) %s $(NCURSES_MAJOR):$(NCURSES_MINOR) $(LT_UNDEF) $(TINFO_LIST)\n", compile, lib_name, OBJS, libtool_version
+					printf "\tcd ../lib && $(LIBTOOL_LINK) $(%s) -shared -o %s $(%s_OBJS:$o=.lo) -rpath $(DESTDIR)$(libdir) %s $(NCURSES_MAJOR):$(NCURSES_MINOR) $(LT_UNDEF) $(TINFO_LIST)\n", compile, lib_name, OBJS, libtool_version
 				} else {
-					printf "\tcd ../lib && $(LIBTOOL_LINK) $(%s) -o %s $(%s_OBJS:$o=.lo) -rpath $(DESTDIR)$(libdir) %s $(NCURSES_MAJOR):$(NCURSES_MINOR) $(LT_UNDEF) $(SHLIB_LIST)\n", compile, lib_name, OBJS, libtool_version
+					printf "\tcd ../lib && $(LIBTOOL_LINK) $(%s) -shared -o %s $(%s_OBJS:$o=.lo) -rpath $(DESTDIR)$(libdir) %s $(NCURSES_MAJOR):$(NCURSES_MINOR) $(LT_UNDEF) $(SHLIB_LIST)\n", compile, lib_name, OBJS, libtool_version
 				}
 				print  ""
 				print  "install \\"
diff -ur ncurses-5.9-orig/mk-2nd.awk ncurses-5.9/mk-2nd.awk
--- ncurses-5.9-orig/mk-2nd.awk	2005-01-22 11:30:04 -0500
+++ ncurses-5.9/mk-2nd.awk	2013-07-04 18:38:38 -0400
@@ -122,7 +122,7 @@
 				} else if ( subset ~ /termlib/ ) {
 					mycflags=" -DUSE_TERMLIB"
 				}
-				printf "$(LIBTOOL_COMPILE) $(%s) $(CFLAGS_%s)%s -c ", compile, MODEL, mycflags
+				printf "$(LIBTOOL_COMPILE) $(%s) -shared $(CFLAGS_%s)%s -c ", compile, MODEL, mycflags
 				if ( $3 == "." || srcdir == "." ) {
 					dir = $3 "/"
 					sub("^\\$\\(srcdir\\)/","",dir);
diff -ur ncurses-5.9-orig/ncurses/Makefile.in ncurses-5.9/ncurses/Makefile.in
--- ncurses-5.9-orig/ncurses/Makefile.in	2010-11-27 16:45:27 -0500
+++ ncurses-5.9/ncurses/Makefile.in	2013-07-04 18:38:38 -0400
@@ -93,7 +93,7 @@
 CFLAGS		= @CFLAGS@
 
 INCDIR		= $(srcdir)/../include
-CPPFLAGS	= -DHAVE_CONFIG_H -I../ncurses -I$(srcdir) @CPPFLAGS@
+CPPFLAGS	= -DHAVE_CONFIG_H -DNCURSES_DLL -I../ncurses -I$(srcdir) @CPPFLAGS@
 
 CCFLAGS		= $(CPPFLAGS) $(CFLAGS)
 
diff -ur ncurses-5.9-orig/ncurses/base/MKlib_gen.sh ncurses-5.9/ncurses/base/MKlib_gen.sh
--- ncurses-5.9-orig/ncurses/base/MKlib_gen.sh	2011-01-22 14:47:29 -0500
+++ ncurses-5.9/ncurses/base/MKlib_gen.sh	2013-07-04 18:38:38 -0400
@@ -159,7 +159,7 @@
 
 if test "$USE" = generated ; then
 cat >$ED4 <<EOF
-	s/^\(.*\) \(.*\) (\(.*\))\$/NCURSES_EXPORT(\1) (\2) (\3)/
+	s/^\(.*\) \(.*\) (\(.*\))\$/NCURSES_EXPORT(\1) \2 (\3)/
 EOF
 else
 cat >$ED4 <<EOF
@@ -224,6 +224,7 @@
 			break;
 		}
 	}
+	printf "UNDEF %s\n", $myfunc;
 	print $0;
 	print "{";
 	argcount = 1;
@@ -451,4 +452,5 @@
 	-e 's/^[ 	]*#/#/' \
 	-e '/#ident/d' \
 	-e '/#line/d' \
+	-e 's/UNDEF/#undef/' \
 | sed -f $ED4
diff -ur ncurses-5.9-orig/ncurses/base/lib_driver.c ncurses-5.9/ncurses/base/lib_driver.c
--- ncurses-5.9-orig/ncurses/base/lib_driver.c	2010-12-19 19:29:17 -0500
+++ ncurses-5.9/ncurses/base/lib_driver.c	2013-07-04 18:38:38 -0400
@@ -42,7 +42,7 @@
 
 static DRIVER_ENTRY DriverTable[] =
 {
-#ifdef __MINGW32__
+#if defined(__MINGW32__) || defined(_MSC_VER)
     {"win", &_nc_WIN_DRIVER},
 #endif
     {"tinfo", &_nc_TINFO_DRIVER}
diff -ur ncurses-5.9-orig/ncurses/curses.priv.h ncurses-5.9/ncurses/curses.priv.h
--- ncurses-5.9-orig/ncurses/curses.priv.h	2011-01-22 16:10:19 -0500
+++ ncurses-5.9/ncurses/curses.priv.h	2013-07-04 18:38:38 -0400
@@ -1239,8 +1239,14 @@
 #define	W_OK	2		/* Test for write permission.  */
 #endif
 #ifndef X_OK
+#ifdef _MSC_VER
+#define X_OK    0		/* MSVC does not support X_OK and generate invalid
+                                 * parameter exception if used as argument to "access"
+                                 * function. */
+#else
 #define	X_OK	1		/* Test for execute permission.  */
 #endif
+#endif
 #ifndef F_OK
 #define	F_OK	0		/* Test for existence.  */
 #endif
@@ -1966,7 +1972,7 @@
  * Not everyone has vsscanf(), but we'd like to use it for scanw().
  */
 #if !HAVE_VSSCANF
-extern int vsscanf(const char *str, const char *format, va_list __arg);
+extern NCURSES_EXPORT(int) vsscanf(const char *str, const char *format, va_list __arg);
 #endif
 
 /* scroll indices */
@@ -2192,7 +2198,7 @@
 #endif /* !USE_TERM_DRIVER */
 
 #ifdef USE_TERM_DRIVER
-#ifdef __MINGW32__
+#if defined(__MINGW32__) || defined(_MSC_VER)
 #include <nc_mingw.h>
 extern NCURSES_EXPORT_VAR(TERM_DRIVER) _nc_WIN_DRIVER;
 #endif
diff -ur ncurses-5.9-orig/ncurses/tinfo/comp_parse.c ncurses-5.9/ncurses/tinfo/comp_parse.c
--- ncurses-5.9-orig/ncurses/tinfo/comp_parse.c	2010-12-25 18:06:37 -0500
+++ ncurses-5.9/ncurses/tinfo/comp_parse.c	2013-07-04 18:38:38 -0400
@@ -55,11 +55,11 @@
 MODULE_ID("$Id: comp_parse.c,v 1.73 2010/12/25 23:06:37 tom Exp $")
 
 static void sanity_check2(TERMTYPE *, bool);
-NCURSES_IMPEXP void NCURSES_API(*_nc_check_termtype2) (TERMTYPE *, bool) = sanity_check2;
+NCURSES_IMPEXP void (NCURSES_API *_nc_check_termtype2) (TERMTYPE *, bool) = sanity_check2;
 
 /* obsolete: 20040705 */
 static void sanity_check(TERMTYPE *);
-NCURSES_IMPEXP void NCURSES_API(*_nc_check_termtype) (TERMTYPE *) = sanity_check;
+NCURSES_IMPEXP void (NCURSES_API *_nc_check_termtype) (TERMTYPE *) = sanity_check;
 
 static void
 enqueue(ENTRY * ep)
diff -ur ncurses-5.9-orig/ncurses/tinfo/db_iterator.c ncurses-5.9/ncurses/tinfo/db_iterator.c
--- ncurses-5.9-orig/ncurses/tinfo/db_iterator.c	2010-12-25 18:00:25 -0500
+++ ncurses-5.9/ncurses/tinfo/db_iterator.c	2013-07-04 18:38:38 -0400
@@ -160,6 +160,11 @@
 		    result = _nc_tic_dir(envp);
 	    }
 	    break;
+#ifdef _MSC_VER
+        case dbdWin32:
+            result = _nc_win32_terminfo();
+            break;
+#endif 
 	case dbdHome:
 	    if (use_terminfo_vars()) {
 		result = _nc_home_terminfo();
diff -ur ncurses-5.9-orig/ncurses/tinfo/home_terminfo.c ncurses-5.9/ncurses/tinfo/home_terminfo.c
--- ncurses-5.9-orig/ncurses/tinfo/home_terminfo.c	2010-12-25 18:43:58 -0500
+++ ncurses-5.9/ncurses/tinfo/home_terminfo.c	2013-07-04 18:38:38 -0400
@@ -37,6 +37,12 @@
 #include <curses.priv.h>
 #include <tic.h>
 
+#ifdef _MSC_VER
+#  include <windows.h>
+#  include <sys/types.h>
+#  include <sys/stat.h>
+#endif
+
 MODULE_ID("$Id: home_terminfo.c,v 1.12 2010/12/25 23:43:58 tom Exp $")
 
 /* ncurses extension...fall back on user's private directory */
@@ -65,3 +71,58 @@
 #endif
     return result;
 }
+
+#ifdef _MSC_VER
+NCURSES_EXPORT(char *)
+_nc_win32_terminfo(void)
+{
+    char *result = NULL;
+    static char *temp = NULL;
+    int n = 1024, nr;
+
+    if (temp == NULL) {
+        HMODULE hmod;
+
+        if (GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,
+                              (LPCTSTR)_nc_win32_terminfo,
+                              &hmod)) {
+            do {
+                if (temp == NULL)
+                    temp = typeMalloc(char, n);
+                else {
+                    n *= 2;
+                    temp = typeRealloc(char, n, temp);
+                }
+
+                if ((nr = GetModuleFileName(hmod, temp, n)) == 0)
+                    break;
+                else if (nr < n) {
+                    char *p = strrchr(temp, '\\');
+
+                    if (p != 0) {
+                        *p = 0;
+                        nr = strlen(temp);
+                        if (nr > 4 && strncmp(&temp[nr-4], "\\bin", 4) == 0) {
+                            struct stat st;
+
+                            temp = typeRealloc(char, nr-4+64, temp);
+                            strcpy(&temp[nr-4], "\\share\\terminfo");
+                            if (stat(temp, &st) == 0 && (st.st_mode & _S_IFDIR) != 0)
+                                result = temp;
+                        }
+                    }
+                    break;
+                }
+            } while (1);
+        }
+    } else
+        result = temp;
+
+    if (result == NULL && temp != NULL) {
+        free(temp);
+        temp = NULL;
+    }
+
+    return result;
+}
+#endif
diff -ur ncurses-5.9-orig/ncurses/tinfo/lib_print.c ncurses-5.9/ncurses/tinfo/lib_print.c
--- ncurses-5.9-orig/ncurses/tinfo/lib_print.c	2010-06-05 18:18:35 -0400
+++ ncurses-5.9/ncurses/tinfo/lib_print.c	2013-07-04 18:38:38 -0400
@@ -95,7 +95,7 @@
      * kernel will ship the contiguous clist items from the last write
      * immediately.
      */
-#ifndef __MINGW32__
+#if !defined(__MINGW32__) && !defined(_MSC_VER)
     (void) sleep(0);
 #endif
     free(mybuf);
diff -ur ncurses-5.9-orig/ncurses/tinfo/setbuf.c ncurses-5.9/ncurses/tinfo/setbuf.c
--- ncurses-5.9-orig/ncurses/tinfo/setbuf.c	2010-08-28 17:08:31 -0400
+++ ncurses-5.9/ncurses/tinfo/setbuf.c	2013-07-04 18:38:38 -0400
@@ -149,8 +149,13 @@
 #ifdef SETVBUF_REVERSED		/* pre-svr3? */
 	(void) setvbuf(ofp, buf_ptr, buf_len, buf_len ? _IOFBF : _IOLBF);
 #else
+#ifdef _MSC_VER
+        /* MSVC does not accept 0 as buffer size */
+	(void) setvbuf(ofp, buf_ptr, buf_len ? _IOFBF : _IOLBF, buf_len ? buf_len : BUFSIZ);
+#else
 	(void) setvbuf(ofp, buf_ptr, buf_len ? _IOFBF : _IOLBF, buf_len);
 #endif
+#endif
 #elif HAVE_SETBUFFER
 	(void) setbuffer(ofp, buf_ptr, (int) buf_len);
 #endif
diff -ur ncurses-5.9-orig/ncurses/tinfo/write_entry.c ncurses-5.9/ncurses/tinfo/write_entry.c
--- ncurses-5.9-orig/ncurses/tinfo/write_entry.c	2010-12-25 18:23:08 -0500
+++ ncurses-5.9/ncurses/tinfo/write_entry.c	2013-07-04 18:38:38 -0400
@@ -173,7 +173,7 @@
 
 	if ((rc = stat(path, &statbuf)) < 0) {
 	    rc = mkdir(path
-#if !defined(__MINGW32__)
+#if !defined(__MINGW32__) && !defined(_MSC_VER)
 		       ,0777
 #endif
 		);
diff -ur ncurses-5.9-orig/ncurses/trace/lib_trace.c ncurses-5.9/ncurses/trace/lib_trace.c
--- ncurses-5.9-orig/ncurses/trace/lib_trace.c	2010-12-18 20:21:19 -0500
+++ ncurses-5.9/ncurses/trace/lib_trace.c	2013-07-04 18:38:38 -0400
@@ -121,7 +121,11 @@
 	 * end of each line.  This is useful in case the program dies. 
 	 */
 #if HAVE_SETVBUF		/* ANSI */
+#ifdef _MSC_VER
+	(void) setvbuf(TraceFP, (char *) 0, _IOLBF, BUFSIZ);
+#else
 	(void) setvbuf(TraceFP, (char *) 0, _IOLBF, 0);
+#endif
 #elif HAVE_SETBUF /* POSIX */
 	(void) setbuffer(TraceFP, (char *) 0);
 #endif
@@ -184,7 +188,7 @@
 # if USE_WEAK_SYMBOLS
 	if ((pthread_self))
 # endif
-#ifdef __MINGW32__
+#if defined(__MINGW32__) || defined(_MSC_VER)
 	    fprintf(TraceFP, "%#lx:", (long) (void *) pthread_self().p);
 #else
 	    fprintf(TraceFP, "%#lx:", (long) (void *) pthread_self());
diff -ur ncurses-5.9-orig/ncurses/tty/lib_twait.c ncurses-5.9/ncurses/tty/lib_twait.c
--- ncurses-5.9-orig/ncurses/tty/lib_twait.c	2010-12-25 18:43:58 -0500
+++ ncurses-5.9/ncurses/tty/lib_twait.c	2013-07-04 18:38:38 -0400
@@ -65,8 +65,12 @@
 #  include <sys/select.h>
 # endif
 #endif
-#ifdef __MINGW32__
-#  include <sys/time.h>
+#if defined(__MINGW32__) || defined(_MSC_VER)
+#  ifdef _MSC_VER
+#    include <winsock2.h>
+#  else
+#    include <sys/time.h>
+#  endif
 #endif
 #undef CUR
 
diff -ur ncurses-5.9-orig/ncurses/win32con/win_driver.c ncurses-5.9/ncurses/win32con/win_driver.c
--- ncurses-5.9-orig/ncurses/win32con/win_driver.c	2010-12-25 14:28:21 -0500
+++ ncurses-5.9/ncurses/win32con/win_driver.c	2013-07-04 18:38:38 -0400
@@ -138,7 +138,7 @@
 static BOOL
 con_write(TERMINAL_CONTROL_BLOCK * TCB, int y, int x, chtype *str, int n)
 {
-    CHAR_INFO ci[n];
+    CHAR_INFO* ci = (CHAR_INFO*)_alloca(n * sizeof(CHAR_INFO*));
     COORD loc, siz;
     SMALL_RECT rec;
     int i;
@@ -197,7 +197,7 @@
 
     if ((CurScreen(sp)->_clear || NewScreen(sp)->_clear)) {
 	int x;
-	chtype empty[Width];
+	chtype* empty = (chtype*)_alloca(Width * sizeof(chtype));
 
 	for (x = 0; x < Width; x++)
 	    empty[x] = ' ';
diff -ur ncurses-5.9-orig/panel/Makefile.in ncurses-5.9/panel/Makefile.in
--- ncurses-5.9-orig/panel/Makefile.in	2010-11-27 16:45:27 -0500
+++ ncurses-5.9/panel/Makefile.in	2013-07-04 18:38:38 -0400
@@ -85,7 +85,7 @@
 CPP		= @CPP@
 CFLAGS		= @CFLAGS@
 
-CPPFLAGS	= -I@top_srcdir@/ncurses -DHAVE_CONFIG_H @CPPFLAGS@
+CPPFLAGS	= -I@top_srcdir@/ncurses -DHAVE_CONFIG_H -DNCPANEL_DLL @CPPFLAGS@
 
 CCFLAGS		= $(CPPFLAGS) $(CFLAGS)
 
diff -ur ncurses-5.9-orig/panel/p_above.c ncurses-5.9/panel/p_above.c
--- ncurses-5.9-orig/panel/p_above.c	2010-01-23 16:22:15 -0500
+++ ncurses-5.9/panel/p_above.c	2013-07-04 18:38:38 -0400
@@ -39,7 +39,7 @@
 MODULE_ID("$Id: p_above.c,v 1.8 2010/01/23 21:22:15 tom Exp $")
 
 #if NCURSES_SP_FUNCS
-NCURSES_EXPORT(PANEL *)
+NCPANEL_EXPORT(PANEL *)
 ground_panel(SCREEN * sp)
 {
   T((T_CALLED("ground_panel(%p)"), sp));
@@ -62,7 +62,7 @@
 }
 #endif
 
-NCURSES_EXPORT(PANEL *)
+NCPANEL_EXPORT(PANEL *)
 panel_above(const PANEL * pan)
 {
   PANEL *result;
diff -ur ncurses-5.9-orig/panel/p_below.c ncurses-5.9/panel/p_below.c
--- ncurses-5.9-orig/panel/p_below.c	2010-01-23 16:22:15 -0500
+++ ncurses-5.9/panel/p_below.c	2013-07-04 18:38:38 -0400
@@ -39,7 +39,7 @@
 MODULE_ID("$Id: p_below.c,v 1.8 2010/01/23 21:22:15 tom Exp $")
 
 #if NCURSES_SP_FUNCS
-NCURSES_EXPORT(PANEL *)
+NCPANEL_EXPORT(PANEL *)
 ceiling_panel(SCREEN * sp)
 {
   T((T_CALLED("ceiling_panel(%p)"), sp));
@@ -60,7 +60,7 @@
 }
 #endif
 
-NCURSES_EXPORT(PANEL *)
+NCPANEL_EXPORT(PANEL *)
 panel_below(const PANEL * pan)
 {
   PANEL *result;
diff -ur ncurses-5.9-orig/panel/p_bottom.c ncurses-5.9/panel/p_bottom.c
--- ncurses-5.9-orig/panel/p_bottom.c	2010-01-23 16:22:16 -0500
+++ ncurses-5.9/panel/p_bottom.c	2013-07-04 18:38:38 -0400
@@ -39,7 +39,7 @@
 
 MODULE_ID("$Id: p_bottom.c,v 1.13 2010/01/23 21:22:16 tom Exp $")
 
-NCURSES_EXPORT(int)
+NCPANEL_EXPORT(int)
 bottom_panel(PANEL * pan)
 {
   int err = OK;
diff -ur ncurses-5.9-orig/panel/p_delete.c ncurses-5.9/panel/p_delete.c
--- ncurses-5.9-orig/panel/p_delete.c	2010-01-23 16:22:16 -0500
+++ ncurses-5.9/panel/p_delete.c	2013-07-04 18:38:38 -0400
@@ -39,7 +39,7 @@
 
 MODULE_ID("$Id: p_delete.c,v 1.10 2010/01/23 21:22:16 tom Exp $")
 
-NCURSES_EXPORT(int)
+NCPANEL_EXPORT(int)
 del_panel(PANEL * pan)
 {
   int err = OK;
diff -ur ncurses-5.9-orig/panel/p_hidden.c ncurses-5.9/panel/p_hidden.c
--- ncurses-5.9-orig/panel/p_hidden.c	2010-01-23 16:22:15 -0500
+++ ncurses-5.9/panel/p_hidden.c	2013-07-04 18:38:38 -0400
@@ -39,7 +39,7 @@
 
 MODULE_ID("$Id: p_hidden.c,v 1.9 2010/01/23 21:22:15 tom Exp $")
 
-NCURSES_EXPORT(int)
+NCPANEL_EXPORT(int)
 panel_hidden(const PANEL * pan)
 {
   int rc = ERR;
diff -ur ncurses-5.9-orig/panel/p_hide.c ncurses-5.9/panel/p_hide.c
--- ncurses-5.9-orig/panel/p_hide.c	2010-01-23 16:22:16 -0500
+++ ncurses-5.9/panel/p_hide.c	2013-07-04 18:38:38 -0400
@@ -38,7 +38,7 @@
 
 MODULE_ID("$Id: p_hide.c,v 1.11 2010/01/23 21:22:16 tom Exp $")
 
-NCURSES_EXPORT(int)
+NCPANEL_EXPORT(int)
 hide_panel(register PANEL * pan)
 {
   int err = ERR;
diff -ur ncurses-5.9-orig/panel/p_move.c ncurses-5.9/panel/p_move.c
--- ncurses-5.9-orig/panel/p_move.c	2010-01-23 16:22:15 -0500
+++ ncurses-5.9/panel/p_move.c	2013-07-04 18:38:38 -0400
@@ -39,7 +39,7 @@
 
 MODULE_ID("$Id: p_move.c,v 1.11 2010/01/23 21:22:15 tom Exp $")
 
-NCURSES_EXPORT(int)
+NCPANEL_EXPORT(int)
 move_panel(PANEL * pan, int starty, int startx)
 {
   int rc = ERR;
diff -ur ncurses-5.9-orig/panel/p_new.c ncurses-5.9/panel/p_new.c
--- ncurses-5.9-orig/panel/p_new.c	2010-01-23 16:22:16 -0500
+++ ncurses-5.9/panel/p_new.c	2013-07-04 18:38:38 -0400
@@ -88,7 +88,7 @@
   return _nc_stdscr_pseudo_panel;
 }
 
-NCURSES_EXPORT(PANEL *)
+NCPANEL_EXPORT(PANEL *)
 new_panel(WINDOW *win)
 {
   PANEL *pan = (PANEL *) 0;
diff -ur ncurses-5.9-orig/panel/p_replace.c ncurses-5.9/panel/p_replace.c
--- ncurses-5.9-orig/panel/p_replace.c	2010-01-23 16:22:16 -0500
+++ ncurses-5.9/panel/p_replace.c	2013-07-04 18:38:38 -0400
@@ -38,7 +38,7 @@
 
 MODULE_ID("$Id: p_replace.c,v 1.11 2010/01/23 21:22:16 tom Exp $")
 
-NCURSES_EXPORT(int)
+NCPANEL_EXPORT(int)
 replace_panel(PANEL * pan, WINDOW *win)
 {
   int rc = ERR;
diff -ur ncurses-5.9-orig/panel/p_show.c ncurses-5.9/panel/p_show.c
--- ncurses-5.9-orig/panel/p_show.c	2010-01-23 16:22:16 -0500
+++ ncurses-5.9/panel/p_show.c	2013-07-04 18:38:38 -0400
@@ -38,7 +38,7 @@
 
 MODULE_ID("$Id: p_show.c,v 1.13 2010/01/23 21:22:16 tom Exp $")
 
-NCURSES_EXPORT(int)
+NCPANEL_EXPORT(int)
 show_panel(PANEL * pan)
 {
   int err = ERR;
diff -ur ncurses-5.9-orig/panel/p_top.c ncurses-5.9/panel/p_top.c
--- ncurses-5.9-orig/panel/p_top.c	2010-01-23 16:22:16 -0500
+++ ncurses-5.9/panel/p_top.c	2013-07-04 18:38:39 -0400
@@ -38,7 +38,7 @@
 
 MODULE_ID("$Id: p_top.c,v 1.6 2010/01/23 21:22:16 tom Exp $")
 
-NCURSES_EXPORT(int)
+NCPANEL_EXPORT(int)
 top_panel(PANEL * pan)
 {
   T((T_CALLED("top_panel(%p)"), (void *)pan));
diff -ur ncurses-5.9-orig/panel/p_update.c ncurses-5.9/panel/p_update.c
--- ncurses-5.9-orig/panel/p_update.c	2010-01-23 16:22:16 -0500
+++ ncurses-5.9/panel/p_update.c	2013-07-04 18:38:39 -0400
@@ -39,7 +39,7 @@
 
 MODULE_ID("$Id: p_update.c,v 1.11 2010/01/23 21:22:16 tom Exp $")
 
-NCURSES_EXPORT(void)
+NCPANEL_EXPORT(void)
 NCURSES_SP_NAME(update_panels) (NCURSES_SP_DCL0)
 {
   PANEL *pan;
@@ -70,7 +70,7 @@
 }
 
 #if NCURSES_SP_FUNCS
-NCURSES_EXPORT(void)
+NCPANEL_EXPORT(void)
 update_panels(void)
 {
   NCURSES_SP_NAME(update_panels) (CURRENT_SCREEN);
diff -ur ncurses-5.9-orig/panel/p_user.c ncurses-5.9/panel/p_user.c
--- ncurses-5.9-orig/panel/p_user.c	2010-01-23 18:18:35 -0500
+++ ncurses-5.9/panel/p_user.c	2013-07-04 18:38:39 -0400
@@ -38,7 +38,7 @@
 
 MODULE_ID("$Id: p_user.c,v 1.8 2010/01/23 23:18:35 tom Exp $")
 
-NCURSES_EXPORT(int)
+NCPANEL_EXPORT(int)
 set_panel_userptr(PANEL * pan, NCURSES_CONST void *uptr)
 {
   T((T_CALLED("set_panel_userptr(%p,%p)"), (void *)pan, (NCURSES_CONST void *)uptr));
@@ -48,7 +48,7 @@
   returnCode(OK);
 }
 
-NCURSES_EXPORT(NCURSES_CONST void *)
+NCPANEL_EXPORT(NCURSES_CONST void *)
 panel_userptr(const PANEL * pan)
 {
   T((T_CALLED("panel_userptr(%p)"), (const void *)pan));
diff -ur ncurses-5.9-orig/panel/p_win.c ncurses-5.9/panel/p_win.c
--- ncurses-5.9-orig/panel/p_win.c	2010-01-23 16:22:15 -0500
+++ ncurses-5.9/panel/p_win.c	2013-07-04 18:38:39 -0400
@@ -38,7 +38,7 @@
 
 MODULE_ID("$Id: p_win.c,v 1.6 2010/01/23 21:22:15 tom Exp $")
 
-NCURSES_EXPORT(WINDOW *)
+NCPANEL_EXPORT(WINDOW *)
 panel_window(const PANEL * pan)
 {
   T((T_CALLED("panel_window(%p)"), (const void *)pan));
diff -ur ncurses-5.9-orig/panel/panel.c ncurses-5.9/panel/panel.c
--- ncurses-5.9-orig/panel/panel.c	2010-01-23 16:22:16 -0500
+++ ncurses-5.9/panel/panel.c	2013-07-04 18:38:39 -0400
@@ -42,7 +42,7 @@
 	_nc_retrace_panel (pan)
 --------------------------------------------------------------------------*/
 #ifdef TRACE
-NCURSES_EXPORT(PANEL *)
+NCPANEL_EXPORT(PANEL *)
 _nc_retrace_panel(PANEL * pan)
 {
   T((T_RETURN("%p"), (void *)pan));
@@ -55,7 +55,7 @@
 --------------------------------------------------------------------------*/
 #ifdef TRACE
 #ifndef TRACE_TXT
-NCURSES_EXPORT(const char *)
+NCPANEL_EXPORT(const char *)
 _nc_my_visbuf(const void *ptr)
 {
   char temp[32];
@@ -73,7 +73,7 @@
 	dPanel(text,pan)
 --------------------------------------------------------------------------*/
 #ifdef TRACE
-NCURSES_EXPORT(void)
+NCPANEL_EXPORT(void)
 _nc_dPanel(const char *text, const PANEL * pan)
 {
   _tracef("%s id=%s b=%s a=%s y=%d x=%d",
@@ -88,7 +88,7 @@
 	dStack(fmt,num,pan)
 --------------------------------------------------------------------------*/
 #ifdef TRACE
-NCURSES_EXPORT(void)
+NCPANEL_EXPORT(void)
 _nc_dStack(const char *fmt, int num, const PANEL * pan)
 {
   char s80[80];
@@ -114,7 +114,7 @@
 	Wnoutrefresh(pan) - debugging hook for wnoutrefresh
 --------------------------------------------------------------------------*/
 #ifdef TRACE
-NCURSES_EXPORT(void)
+NCPANEL_EXPORT(void)
 _nc_Wnoutrefresh(const PANEL * pan)
 {
   dPanel("wnoutrefresh", pan);
@@ -126,7 +126,7 @@
 	Touchpan(pan)
 --------------------------------------------------------------------------*/
 #ifdef TRACE
-NCURSES_EXPORT(void)
+NCPANEL_EXPORT(void)
 _nc_Touchpan(const PANEL * pan)
 {
   dPanel("Touchpan", pan);
@@ -138,7 +138,7 @@
 	Touchline(pan,start,count)
 --------------------------------------------------------------------------*/
 #ifdef TRACE
-NCURSES_EXPORT(void)
+NCPANEL_EXPORT(void)
 _nc_Touchline(const PANEL * pan, int start, int count)
 {
   char s80[80];
diff -ur ncurses-5.9-orig/panel/panel.h ncurses-5.9/panel/panel.h
--- ncurses-5.9-orig/panel/panel.h	2009-04-11 15:50:40 -0400
+++ ncurses-5.9/panel/panel.h	2013-07-04 18:38:39 -0400
@@ -53,27 +53,27 @@
 extern "C" {
 #endif
 
-extern NCURSES_EXPORT(WINDOW*) panel_window (const PANEL *);
-extern NCURSES_EXPORT(void)    update_panels (void);
-extern NCURSES_EXPORT(int)     hide_panel (PANEL *);
-extern NCURSES_EXPORT(int)     show_panel (PANEL *);
-extern NCURSES_EXPORT(int)     del_panel (PANEL *);
-extern NCURSES_EXPORT(int)     top_panel (PANEL *);
-extern NCURSES_EXPORT(int)     bottom_panel (PANEL *);
-extern NCURSES_EXPORT(PANEL*)  new_panel (WINDOW *);
-extern NCURSES_EXPORT(PANEL*)  panel_above (const PANEL *);
-extern NCURSES_EXPORT(PANEL*)  panel_below (const PANEL *);
-extern NCURSES_EXPORT(int)     set_panel_userptr (PANEL *, NCURSES_CONST void *);
-extern NCURSES_EXPORT(NCURSES_CONST void*) panel_userptr (const PANEL *);
-extern NCURSES_EXPORT(int)     move_panel (PANEL *, int, int);
-extern NCURSES_EXPORT(int)     replace_panel (PANEL *,WINDOW *);
-extern NCURSES_EXPORT(int)     panel_hidden (const PANEL *);
+extern NCPANEL_EXPORT(WINDOW*) panel_window (const PANEL *);
+extern NCPANEL_EXPORT(void)    update_panels (void);
+extern NCPANEL_EXPORT(int)     hide_panel (PANEL *);
+extern NCPANEL_EXPORT(int)     show_panel (PANEL *);
+extern NCPANEL_EXPORT(int)     del_panel (PANEL *);
+extern NCPANEL_EXPORT(int)     top_panel (PANEL *);
+extern NCPANEL_EXPORT(int)     bottom_panel (PANEL *);
+extern NCPANEL_EXPORT(PANEL*)  new_panel (WINDOW *);
+extern NCPANEL_EXPORT(PANEL*)  panel_above (const PANEL *);
+extern NCPANEL_EXPORT(PANEL*)  panel_below (const PANEL *);
+extern NCPANEL_EXPORT(int)     set_panel_userptr (PANEL *, NCURSES_CONST void *);
+extern NCPANEL_EXPORT(NCURSES_CONST void*) panel_userptr (const PANEL *);
+extern NCPANEL_EXPORT(int)     move_panel (PANEL *, int, int);
+extern NCPANEL_EXPORT(int)     replace_panel (PANEL *,WINDOW *);
+extern NCPANEL_EXPORT(int)     panel_hidden (const PANEL *);
 
 #if NCURSES_SP_FUNCS
-extern NCURSES_EXPORT(PANEL *) ground_panel(SCREEN *);
-extern NCURSES_EXPORT(PANEL *) ceiling_panel(SCREEN *);
+extern NCPANEL_EXPORT(PANEL *) ground_panel(SCREEN *);
+extern NCPANEL_EXPORT(PANEL *) ceiling_panel(SCREEN *);
 
-extern NCURSES_EXPORT(void)    NCURSES_SP_NAME(update_panels) (SCREEN*);
+extern NCPANEL_EXPORT(void)    NCURSES_SP_NAME(update_panels) (SCREEN*);
 #endif
 
 #if	defined(__cplusplus)
diff -ur ncurses-5.9-orig/panel/panel.priv.h ncurses-5.9/panel/panel.priv.h
--- ncurses-5.9-orig/panel/panel.priv.h	2009-04-11 16:33:55 -0400
+++ ncurses-5.9/panel/panel.priv.h	2013-07-04 18:38:39 -0400
@@ -53,7 +53,7 @@
 
 
 #ifdef TRACE
-   extern NCURSES_EXPORT(const char *) _nc_my_visbuf (const void *);
+   extern NCPANEL_EXPORT(const char *) _nc_my_visbuf (const void *);
 #  ifdef TRACE_TXT
 #    define USER_PTR(ptr) _nc_visbuf((const char *)ptr)
 #  else
@@ -62,12 +62,12 @@
 
 #  define returnPanel(code)	TRACE_RETURN(code,panel)
 
-   extern NCURSES_EXPORT(PANEL *) _nc_retrace_panel (PANEL *);
-   extern NCURSES_EXPORT(void) _nc_dPanel (const char*, const PANEL*);
-   extern NCURSES_EXPORT(void) _nc_dStack (const char*, int, const PANEL*);
-   extern NCURSES_EXPORT(void) _nc_Wnoutrefresh (const PANEL*);
-   extern NCURSES_EXPORT(void) _nc_Touchpan (const PANEL*);
-   extern NCURSES_EXPORT(void) _nc_Touchline (const PANEL*, int, int);
+   extern NCPANEL_EXPORT(PANEL *) _nc_retrace_panel (PANEL *);
+   extern NCPANEL_EXPORT(void) _nc_dPanel (const char*, const PANEL*);
+   extern NCPANEL_EXPORT(void) _nc_dStack (const char*, int, const PANEL*);
+   extern NCPANEL_EXPORT(void) _nc_Wnoutrefresh (const PANEL*);
+   extern NCPANEL_EXPORT(void) _nc_Touchpan (const PANEL*);
+   extern NCPANEL_EXPORT(void) _nc_Touchline (const PANEL*, int, int);
 
 #  define dBug(x) _tracef x
 #  define dPanel(text,pan) _nc_dPanel(text,pan)
@@ -208,7 +208,7 @@
 
 #if NCURSES_SP_FUNCS
 /* These may become later renamed and part of panel.h and the public API */
-extern NCURSES_EXPORT(void) NCURSES_SP_NAME(_nc_update_panels)(SCREEN*);
+extern NCPANEL_EXPORT(void) NCURSES_SP_NAME(_nc_update_panels)(SCREEN*);
 #endif
 
 #endif /* NCURSES_PANEL_PRIV_H */
diff -ur ncurses-5.9-orig/progs/Makefile.in ncurses-5.9/progs/Makefile.in
--- ncurses-5.9-orig/progs/Makefile.in	2010-11-27 16:45:27 -0500
+++ ncurses-5.9/progs/Makefile.in	2013-07-04 18:38:39 -0400
@@ -113,10 +113,10 @@
 
 LDFLAGS_DEFAULT	= $(LDFLAGS_@DFT_UPR_MODEL@)
 
-LIBS_TIC	= @LDFLAGS_STATIC@ @TICS_ARGS@ @TINFO_ARGS@ @LDFLAGS_SHARED@ @LD_MODEL@ @LIBS@
+LIBS_TIC	= @LDFLAGS_STATIC@ @TICS_ARGS@ @TINFO_ARGS@ @LDFLAGS_SHARED@ @LD_MODEL@ @LIBS@ -lgetopt
 LDFLAGS_TIC	= $(LDFLAGS_@DFT_UPR_MODEL@) $(LIBS_TIC)
 
-LIBS_TINFO	= @LDFLAGS_STATIC@ @TINFO_ARGS@ @LDFLAGS_SHARED@ @LD_MODEL@ @LIBS@
+LIBS_TINFO	= @LDFLAGS_STATIC@ @TINFO_ARGS@ @LDFLAGS_SHARED@ @LD_MODEL@ @LIBS@ -lgetopt
 LDFLAGS_TINFO	= $(LDFLAGS_@DFT_UPR_MODEL@) $(LIBS_TINFO)
 
 LINT		= @LINT@
diff -ur ncurses-5.9-orig/progs/progs.priv.h ncurses-5.9/progs/progs.priv.h
--- ncurses-5.9-orig/progs/progs.priv.h	2008-08-03 13:43:05 -0400
+++ ncurses-5.9/progs/progs.priv.h	2013-07-04 18:38:39 -0400
@@ -148,8 +148,14 @@
 #endif
 
 #ifndef X_OK
+#ifdef _MSC_VER
+#define X_OK    0		/* MSVC does not support X_OK and generate invalid
+                                 * parameter exception if used as argument to "access"
+                                 * function. */
+#else
 #define	X_OK	1		/* Test for executable.  */
 #endif
+#endif
 
 #ifndef F_OK
 #define	F_OK	0		/* Test for existence.  */
diff -ur ncurses-5.9-orig/test/Makefile.in ncurses-5.9/test/Makefile.in
--- ncurses-5.9-orig/test/Makefile.in	2010-11-28 11:39:40 -0500
+++ ncurses-5.9/test/Makefile.in	2013-07-04 18:38:39 -0400
@@ -105,7 +105,7 @@
 TEST_ARGS	= @LDFLAGS_STATIC@ @TEST_ARGS@ @LDFLAGS_SHARED@ 
 
 # use these for linking with all of the libraries
-LIBS_DEFAULT	= $(TEST_ARGS) @LIBS@ $(TEST_LIBS) $(MATH_LIB)
+LIBS_DEFAULT	= $(TEST_ARGS) @LIBS@ $(TEST_LIBS) $(MATH_LIB) -lgetopt
 LDFLAGS_DEFAULT	= $(LDFLAGS_@DFT_UPR_MODEL@) $(LIBS_DEFAULT)
 
 # use these for linking with the (n)curses library and possibly pthreads
@@ -113,11 +113,11 @@
 LDFLAGS_THREADS	= $(LDFLAGS_@DFT_UPR_MODEL@) $(LIBS_THREADS)
 
 # use these for linking with the (n)curses library
-LIBS_CURSES	= `echo "$(TEST_ARGS) @LIBS@" | sed -e 's/-lform.*-lpanel[^ ]*//'` $(TEST_LIBS) $(MATH_LIB)
+LIBS_CURSES	= `echo "$(TEST_ARGS) @LIBS@" | sed -e 's/-lform.*-lpanel[^ ]*//'` $(TEST_LIBS) $(MATH_LIB) -lgetopt
 LDFLAGS_CURSES	= $(LDFLAGS_@DFT_UPR_MODEL@) $(LIBS_CURSES)
 
 # use these for linking with the tinfo library if we have it, or curses library if not
-LIBS_TINFO	= @LDFLAGS_STATIC@ @TINFO_ARGS@ @LDFLAGS_SHARED@ @LIBS@ $(TEST_LIBS) $(MATH_LIB)
+LIBS_TINFO	= @LDFLAGS_STATIC@ @TINFO_ARGS@ @LDFLAGS_SHARED@ @LIBS@ $(TEST_LIBS) $(MATH_LIB) -lgetopt
 LDFLAGS_TINFO	= $(LDFLAGS_@DFT_UPR_MODEL@) $(LIBS_TINFO)
 
 LINT		= @LINT@
diff -ur ncurses-5.9-orig/test/dots.c ncurses-5.9/test/dots.c
--- ncurses-5.9-orig/test/dots.c	2010-11-13 20:00:02 -0500
+++ ncurses-5.9/test/dots.c	2013-07-04 18:38:39 -0400
@@ -42,6 +42,10 @@
 
 #define valid(s) ((s != 0) && s != (char *)-1)
 
+#ifdef _MSC_VER
+#  define STDOUT_FILENO 1
+#endif
+
 static bool interrupted = FALSE;
 static long total_chars = 0;
 static time_t started;
diff -ur ncurses-5.9-orig/test/dots_mvcur.c ncurses-5.9/test/dots_mvcur.c
--- ncurses-5.9-orig/test/dots_mvcur.c	2010-11-13 20:00:44 -0500
+++ ncurses-5.9/test/dots_mvcur.c	2013-07-04 18:38:39 -0400
@@ -42,6 +42,10 @@
 
 #define valid(s) ((s != 0) && s != (char *)-1)
 
+#ifdef _MSC_VER
+#  define STDOUT_FILENO 1
+#endif
+
 static bool interrupted = FALSE;
 static long total_chars = 0;
 static time_t started;
diff -ur ncurses-5.9-orig/test/ncurses.c ncurses-5.9/test/ncurses.c
--- ncurses-5.9-orig/test/ncurses.c	2011-01-22 14:48:33 -0500
+++ ncurses-5.9/test/ncurses.c	2013-07-04 18:38:39 -0400
@@ -487,7 +487,7 @@
 	addstr("Shelling out...");
     def_prog_mode();
     endwin();
-#ifdef __MINGW32__
+#if defined(__MINGW32__) || defined(_MSC_VER)
     system("cmd.exe");
 #else
     system("sh");
diff -ur ncurses-5.9-orig/test/railroad.c ncurses-5.9/test/railroad.c
--- ncurses-5.9-orig/test/railroad.c	2009-10-24 17:37:56 -0400
+++ ncurses-5.9/test/railroad.c	2013-07-04 18:38:39 -0400
@@ -36,6 +36,10 @@
 #define USE_TINFO
 #include <test.priv.h>
 
+#ifdef _MSC_VER
+#  define STDOUT_FILENO 1
+#endif
+
 #if HAVE_TGETENT
 
 static char *wipeit;
diff -ur ncurses-5.9-orig/test/rain.c ncurses-5.9/test/rain.c
--- ncurses-5.9-orig/test/rain.c	2010-11-13 15:11:46 -0500
+++ ncurses-5.9/test/rain.c	2013-07-04 18:38:39 -0400
@@ -222,7 +222,7 @@
      * Find myself in the list of threads so we can count the number of loops.
      */
     for (mystats = 0; mystats < MAX_THREADS; ++mystats) {
-#ifdef __MINGW32__
+#if defined(__MINGW32__) || defined(_MSC_VER)
 	if (drop_threads[mystats].myself.p == pthread_self().p)
 #else
 	if (drop_threads[mystats].myself == pthread_self())
diff -ur ncurses-5.9-orig/test/test.priv.h ncurses-5.9/test/test.priv.h
--- ncurses-5.9-orig/test/test.priv.h	2011-03-22 05:15:45 -0400
+++ ncurses-5.9/test/test.priv.h	2013-07-04 18:38:39 -0400
@@ -609,7 +609,7 @@
 #define EXIT_FAILURE 1
 #endif
 
-#ifdef __MINGW32__
+#if defined(__MINGW32__) || defined(_MSC_VER)
 #include <nc_mingw.h>
 /* conflicts in test/firstlast.c */
 #undef large
@@ -641,12 +641,24 @@
 
 #define VT_ACSC "``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~"
 
+#ifdef _MSC_VER
+#define CATCHALL(handler) \
+	do { \
+		/* These are the only signal allowed by MSVC. */ \
+		signal(SIGINT, handler); \
+		signal(SIGILL, handler); \
+		signal(SIGFPE, handler); \
+		signal(SIGSEGV, handler); \
+		signal(SIGABRT, handler); \
+        } while (0)
+#else
 #define CATCHALL(handler) { \
 		int nsig; \
 		for (nsig = SIGHUP; nsig < SIGTERM; ++nsig) \
 		    if (nsig != SIGKILL) \
 			signal(nsig, handler); \
 	    }
+#endif
 
 /*
  * Workaround for clean(er) compile with Solaris's legacy curses.
diff -ur ncurses-5.9-orig/test/view.c ncurses-5.9/test/view.c
--- ncurses-5.9-orig/test/view.c	2010-11-13 20:06:02 -0500
+++ ncurses-5.9/test/view.c	2013-07-04 18:38:39 -0400
@@ -62,7 +62,7 @@
 #if HAVE_TERMIOS_H
 # include <termios.h>
 #else
-#if !defined(__MINGW32__)
+#if !defined(__MINGW32__) && !defined(_MSC_VER)
 # include <sgtty.h>
 #endif
 #endif