New Files. Added 'date and time picker' and 'month calendar' control
dummies. They are used by Outlook Express.

diff --git a/dlls/comctl32/Makefile.in b/dlls/comctl32/Makefile.in
index b0960c6..5f58694 100644
--- a/dlls/comctl32/Makefile.in
+++ b/dlls/comctl32/Makefile.in
@@ -10,11 +10,13 @@
 	comboex.c \
 	comctl32undoc.c \
 	commctrl.c \
+	datetime.c \
 	header.c \
 	hotkey.c \
 	imagelist.c \
 	ipaddress.c \
 	listview.c \
+	monthcal.c \
 	nativefont.c \
 	pager.c \
 	progress.c \
diff --git a/dlls/comctl32/datetime.c b/dlls/comctl32/datetime.c
new file mode 100644
index 0000000..d9f816a
--- /dev/null
+++ b/dlls/comctl32/datetime.c
@@ -0,0 +1,128 @@
+/*
+ * Date and time picker control
+ *
+ * Copyright 1998 Eric Kohl
+ *
+ * NOTES
+ *   This is just a dummy control. An author is needed! Any volunteers?
+ *   I will only improve this control once in a while.
+ *     Eric <ekohl@abo.rhein-zeitung.de>
+ *
+ * TODO:
+ *   - All messages.
+ *   - All notifications.
+ *
+ */
+
+#include "windows.h"
+#include "commctrl.h"
+#include "datetime.h"
+#include "win.h"
+#include "debug.h"
+
+
+#define DATETIME_GetInfoPtr(wndPtr) ((DATETIME_INFO *)wndPtr->wExtra[0])
+
+
+
+
+
+
+static LRESULT
+DATETIME_Create (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
+{
+    DATETIME_INFO *infoPtr;
+
+    /* allocate memory for info structure */
+    infoPtr = (DATETIME_INFO *)COMCTL32_Alloc (sizeof(DATETIME_INFO));
+    wndPtr->wExtra[0] = (DWORD)infoPtr;
+
+    if (infoPtr == NULL) {
+	ERR (datetime, "could not allocate info memory!\n");
+	return 0;
+    }
+
+    if ((DATETIME_INFO*)wndPtr->wExtra[0] != infoPtr) {
+	ERR (datetime, "pointer assignment error!\n");
+	return 0;
+    }
+
+    /* initialize info structure */
+
+
+
+    return 0;
+}
+
+
+static LRESULT
+DATETIME_Destroy (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
+{
+    DATETIME_INFO *infoPtr = DATETIME_GetInfoPtr(wndPtr);
+
+
+
+
+
+
+    /* free ipaddress info data */
+    COMCTL32_Free (infoPtr);
+
+    return 0;
+}
+
+
+
+
+LRESULT WINAPI
+DATETIME_WindowProc (HWND32 hwnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam)
+{
+    WND *wndPtr = WIN_FindWndPtr(hwnd);
+
+    switch (uMsg)
+    {
+
+
+	case WM_CREATE:
+	    return DATETIME_Create (wndPtr, wParam, lParam);
+
+	case WM_DESTROY:
+	    return DATETIME_Destroy (wndPtr, wParam, lParam);
+
+	default:
+	    if (uMsg >= WM_USER)
+		ERR (datetime, "unknown msg %04x wp=%08x lp=%08lx\n",
+		     uMsg, wParam, lParam);
+	    return DefWindowProc32A (hwnd, uMsg, wParam, lParam);
+    }
+    return 0;
+}
+
+
+VOID
+DATETIME_Register (VOID)
+{
+    WNDCLASS32A wndClass;
+
+    if (GlobalFindAtom32A (DATETIMEPICK_CLASS32A)) return;
+
+    ZeroMemory (&wndClass, sizeof(WNDCLASS32A));
+    wndClass.style         = CS_GLOBALCLASS;
+    wndClass.lpfnWndProc   = (WNDPROC32)DATETIME_WindowProc;
+    wndClass.cbClsExtra    = 0;
+    wndClass.cbWndExtra    = sizeof(DATETIME_INFO *);
+    wndClass.hCursor       = LoadCursor32A (0, IDC_ARROW32A);
+    wndClass.hbrBackground = (HBRUSH32)(COLOR_WINDOW + 1);
+    wndClass.lpszClassName = DATETIMEPICK_CLASS32A;
+ 
+    RegisterClass32A (&wndClass);
+}
+
+
+VOID
+DATETIME_Unregister (VOID)
+{
+    if (GlobalFindAtom32A (DATETIMEPICK_CLASS32A))
+	UnregisterClass32A (DATETIMEPICK_CLASS32A, (HINSTANCE32)NULL);
+}
+
diff --git a/dlls/comctl32/monthcal.c b/dlls/comctl32/monthcal.c
new file mode 100644
index 0000000..eb29519
--- /dev/null
+++ b/dlls/comctl32/monthcal.c
@@ -0,0 +1,128 @@
+/*
+ * Month calendar control
+ *
+ * Copyright 1998 Eric Kohl
+ *
+ * NOTES
+ *   This is just a dummy control. An author is needed! Any volunteers?
+ *   I will only improve this control once in a while.
+ *     Eric <ekohl@abo.rhein-zeitung.de>
+ *
+ * TODO:
+ *   - All messages.
+ *   - All notifications.
+ *
+ */
+
+#include "windows.h"
+#include "commctrl.h"
+#include "monthcal.h"
+#include "win.h"
+#include "debug.h"
+
+
+#define MONTHCAL_GetInfoPtr(wndPtr) ((MONTHCAL_INFO *)wndPtr->wExtra[0])
+
+
+
+
+
+
+static LRESULT
+MONTHCAL_Create (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
+{
+    MONTHCAL_INFO *infoPtr;
+
+    /* allocate memory for info structure */
+    infoPtr = (MONTHCAL_INFO *)COMCTL32_Alloc (sizeof(MONTHCAL_INFO));
+    wndPtr->wExtra[0] = (DWORD)infoPtr;
+
+    if (infoPtr == NULL) {
+	ERR (monthcal, "could not allocate info memory!\n");
+	return 0;
+    }
+
+    if ((MONTHCAL_INFO*)wndPtr->wExtra[0] != infoPtr) {
+	ERR (monthcal, "pointer assignment error!\n");
+	return 0;
+    }
+
+    /* initialize info structure */
+
+
+
+    return 0;
+}
+
+
+static LRESULT
+MONTHCAL_Destroy (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
+{
+    MONTHCAL_INFO *infoPtr = MONTHCAL_GetInfoPtr(wndPtr);
+
+
+
+
+
+
+    /* free ipaddress info data */
+    COMCTL32_Free (infoPtr);
+
+    return 0;
+}
+
+
+
+
+LRESULT WINAPI
+MONTHCAL_WindowProc (HWND32 hwnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam)
+{
+    WND *wndPtr = WIN_FindWndPtr(hwnd);
+
+    switch (uMsg)
+    {
+
+
+	case WM_CREATE:
+	    return MONTHCAL_Create (wndPtr, wParam, lParam);
+
+	case WM_DESTROY:
+	    return MONTHCAL_Destroy (wndPtr, wParam, lParam);
+
+	default:
+	    if (uMsg >= WM_USER)
+		ERR (monthcal, "unknown msg %04x wp=%08x lp=%08lx\n",
+		     uMsg, wParam, lParam);
+	    return DefWindowProc32A (hwnd, uMsg, wParam, lParam);
+    }
+    return 0;
+}
+
+
+VOID
+MONTHCAL_Register (VOID)
+{
+    WNDCLASS32A wndClass;
+
+    if (GlobalFindAtom32A (MONTHCAL_CLASS32A)) return;
+
+    ZeroMemory (&wndClass, sizeof(WNDCLASS32A));
+    wndClass.style         = CS_GLOBALCLASS;
+    wndClass.lpfnWndProc   = (WNDPROC32)MONTHCAL_WindowProc;
+    wndClass.cbClsExtra    = 0;
+    wndClass.cbWndExtra    = sizeof(MONTHCAL_INFO *);
+    wndClass.hCursor       = LoadCursor32A (0, IDC_ARROW32A);
+    wndClass.hbrBackground = (HBRUSH32)(COLOR_WINDOW + 1);
+    wndClass.lpszClassName = MONTHCAL_CLASS32A;
+ 
+    RegisterClass32A (&wndClass);
+}
+
+
+VOID
+MONTHCAL_Unregister (VOID)
+{
+    if (GlobalFindAtom32A (MONTHCAL_CLASS32A))
+	UnregisterClass32A (MONTHCAL_CLASS32A, (HINSTANCE32)NULL);
+}
+
diff --git a/include/commctrl.h b/include/commctrl.h
index 76f15ef..74e17ef 100644
--- a/include/commctrl.h
+++ b/include/commctrl.h
@@ -1889,6 +1889,17 @@
 #define LVNI_TOLEFT		0x0400
 #define LVNI_TORIGHT		0x0800
 
+#define LVHT_NOWHERE		0x0001
+#define LVHT_ONITEMICON		0x0002
+#define LVHT_ONITEMLABEL	0x0004
+#define LVHT_ONITEMSTATEICON	0x0008
+#define LVHT_ONITEM		(LVHT_ONITEMICON|LVHT_ONITEMLABEL|LVHT_ONITEMSTATEICON)
+
+#define LVHT_ABOVE		0x0008
+#define LVHT_BELOW		0x0010
+#define LVHT_TORIGHT		0x0020
+#define LVHT_TOLEFT		0x0040
+
 #define LVM_FIRST               0x1000
 #define LVM_GETBKCOLOR          (LVM_FIRST+0)
 #define LVM_SETBKCOLOR          (LVM_FIRST+1)
@@ -2132,6 +2143,18 @@
 #define LV_DISPINFO     NMLVDISPINFO
 
 
+typedef struct tagLVHITTESTINFO
+{
+    POINT32 pt;
+    UINT32  flags;
+    INT32   iItem;
+    INT32   iSubItem;
+} LVHITTESTINFO, *LPLVHITTESTINFO;
+
+#define LV_HITTESTINFO LVHITTESTINFO
+#define _LV_HITTESTINFO tagLVHITTESTINFO
+#define LVHITTESTINFO_V1_SIZE CCSIZEOF_STRUCT(LVHITTESTINFO,iItem)
+
 typedef INT32 (CALLBACK *PFNLVCOMPARE)(LPARAM, LPARAM, LPARAM);
 
 #define ListView_SetBkColor(hwnd,clrBk) \
@@ -2147,6 +2170,8 @@
 #define ListView_GetItem32W(hwnd,pitem) \
     (BOOL32)SendMessage32W((hwnd),LVM_GETITEM32W,0,(LPARAM)(LVITEM32W *)(pitem))
 #define ListView_GetItem WINELIB_NAME_AW(ListView_GetItem)
+#define ListView_HitTest(hwnd,pinfo) \
+    (INT32)SendMessage32A((hwnd),LVMHITTEST,0,(LPARAM)(LPLVHITTESTINFO)(pinfo))
 #define ListView_InsertItem32A(hwnd,pitem) \
     (INT32)SendMessage32A((hwnd),LVM_INSERTITEM32A,0,(LPARAM)(const LVITEM32A *)(pitem))
 #define ListView_InsertItem32W(hwnd,pitem) \
@@ -2357,6 +2382,24 @@
 
 
 /**************************************************************************
+ * Month calendar control
+ */
+
+#define MONTHCAL_CLASS32A	"SysMonthCal32"
+#define MONTHCAL_CLASS32W	L"SysMonthCal32"
+#define MONTHCAL_CLASS		WINELIB_NAME_AW(MONTHCAL_CLASS)
+
+
+/**************************************************************************
+ * Date and time picker control
+ */
+
+#define DATETIMEPICK_CLASS32A	"SysDateTimePick32"
+#define DATETIMEPICK_CLASS32W	L"SysDateTimePick32"
+#define DATETIMEPICK_CLASS	WINELIB_NAME_AW(DATETIMEPICK_CLASS)
+
+
+/**************************************************************************
  *  UNDOCUMENTED functions
  */
 
diff --git a/include/datetime.h b/include/datetime.h
new file mode 100644
index 0000000..d8ee1a3
--- /dev/null
+++ b/include/datetime.h
@@ -0,0 +1,21 @@
+/*
+ * Date and time picker class extra info
+ *
+ * Copyright 1998 Eric Kohl
+ */
+
+#ifndef __WINE_DATETIME_H
+#define __WINE_DATETIME_H
+
+typedef struct tagDATETIME_INFO
+{
+    DWORD dwDummy;  /* just to keep the compiler happy ;-) */
+
+
+} DATETIME_INFO, *LPDATETIME_INFO;
+
+
+extern VOID DATETIME_Register (VOID);
+extern VOID DATETIME_Unregister (VOID);
+
+#endif  /* __WINE_DATETIME_H */
diff --git a/include/debug.h b/include/debug.h
index 346a07b..166e2ed 100644
--- a/include/debug.h
+++ b/include/debug.h
@@ -31,128 +31,130 @@
 #define dbch_console 23
 #define dbch_crtdll 24
 #define dbch_cursor 25
-#define dbch_dc 26
-#define dbch_dde 27
-#define dbch_ddeml 28
-#define dbch_ddraw 29
-#define dbch_debug 30
-#define dbch_dialog 31
-#define dbch_dinput 32
-#define dbch_dll 33
-#define dbch_dosfs 34
-#define dbch_dosmem 35
-#define dbch_dplay 36
-#define dbch_driver 37
-#define dbch_dsound 38
-#define dbch_edit 39
-#define dbch_event 40
-#define dbch_exec 41
-#define dbch_file 42
-#define dbch_fixup 43
-#define dbch_font 44
-#define dbch_gdi 45
-#define dbch_global 46
-#define dbch_graphics 47
-#define dbch_header 48
-#define dbch_heap 49
-#define dbch_hook 50
-#define dbch_hotkey 51
-#define dbch_icon 52
-#define dbch_imagehlp 53
-#define dbch_imagelist 54
-#define dbch_imm 55
-#define dbch_int 56
-#define dbch_int10 57
-#define dbch_int16 58
-#define dbch_int17 59
-#define dbch_int19 60
-#define dbch_int21 61
-#define dbch_int31 62
-#define dbch_io 63
-#define dbch_ipaddress 64
-#define dbch_key 65
-#define dbch_keyboard 66
-#define dbch_ldt 67
-#define dbch_listbox 68
-#define dbch_listview 69
-#define dbch_local 70
-#define dbch_mci 71
-#define dbch_mcianim 72
-#define dbch_mciwave 73
-#define dbch_mdi 74
-#define dbch_menu 75
-#define dbch_message 76
-#define dbch_metafile 77
-#define dbch_midi 78
-#define dbch_mmaux 79
-#define dbch_mmio 80
-#define dbch_mmsys 81
-#define dbch_mmtime 82
-#define dbch_module 83
-#define dbch_mpr 84
-#define dbch_msacm 85
-#define dbch_msg 86
-#define dbch_nativefont 87
-#define dbch_nonclient 88
-#define dbch_ntdll 89
-#define dbch_ole 90
-#define dbch_pager 91
-#define dbch_palette 92
-#define dbch_pidl 93
-#define dbch_print 94
-#define dbch_process 95
-#define dbch_profile 96
-#define dbch_progress 97
-#define dbch_prop 98
-#define dbch_psapi 99
-#define dbch_psdrv 100
-#define dbch_rebar 101
-#define dbch_reg 102
-#define dbch_region 103
-#define dbch_relay 104
-#define dbch_resource 105
-#define dbch_s 106
-#define dbch_scroll 107
-#define dbch_security 108
-#define dbch_segment 109
-#define dbch_selector 110
-#define dbch_sem 111
-#define dbch_sendmsg 112
-#define dbch_shell 113
-#define dbch_shm 114
-#define dbch_snoop 115
-#define dbch_sound 116
-#define dbch_static 117
-#define dbch_statusbar 118
-#define dbch_stress 119
-#define dbch_string 120
-#define dbch_syscolor 121
-#define dbch_system 122
-#define dbch_tab 123
-#define dbch_task 124
-#define dbch_text 125
-#define dbch_thread 126
-#define dbch_thunk 127
-#define dbch_timer 128
-#define dbch_toolbar 129
-#define dbch_toolhelp 130
-#define dbch_tooltips 131
-#define dbch_trackbar 132
-#define dbch_treeview 133
-#define dbch_tweak 134
-#define dbch_uitools 135
-#define dbch_updown 136
-#define dbch_ver 137
-#define dbch_virtual 138
-#define dbch_vxd 139
-#define dbch_win 140
-#define dbch_win16drv 141
-#define dbch_win32 142
-#define dbch_wing 143
-#define dbch_winsock 144
-#define dbch_wnet 145
-#define dbch_x11 146
-#define dbch_x11drv 147
+#define dbch_datetime 26
+#define dbch_dc 27
+#define dbch_dde 28
+#define dbch_ddeml 29
+#define dbch_ddraw 30
+#define dbch_debug 31
+#define dbch_dialog 32
+#define dbch_dinput 33
+#define dbch_dll 34
+#define dbch_dosfs 35
+#define dbch_dosmem 36
+#define dbch_dplay 37
+#define dbch_driver 38
+#define dbch_dsound 39
+#define dbch_edit 40
+#define dbch_event 41
+#define dbch_exec 42
+#define dbch_file 43
+#define dbch_fixup 44
+#define dbch_font 45
+#define dbch_gdi 46
+#define dbch_global 47
+#define dbch_graphics 48
+#define dbch_header 49
+#define dbch_heap 50
+#define dbch_hook 51
+#define dbch_hotkey 52
+#define dbch_icon 53
+#define dbch_imagehlp 54
+#define dbch_imagelist 55
+#define dbch_imm 56
+#define dbch_int 57
+#define dbch_int10 58
+#define dbch_int16 59
+#define dbch_int17 60
+#define dbch_int19 61
+#define dbch_int21 62
+#define dbch_int31 63
+#define dbch_io 64
+#define dbch_ipaddress 65
+#define dbch_key 66
+#define dbch_keyboard 67
+#define dbch_ldt 68
+#define dbch_listbox 69
+#define dbch_listview 70
+#define dbch_local 71
+#define dbch_mci 72
+#define dbch_mcianim 73
+#define dbch_mciwave 74
+#define dbch_mdi 75
+#define dbch_menu 76
+#define dbch_message 77
+#define dbch_metafile 78
+#define dbch_midi 79
+#define dbch_mmaux 80
+#define dbch_mmio 81
+#define dbch_mmsys 82
+#define dbch_mmtime 83
+#define dbch_module 84
+#define dbch_monthcal 85
+#define dbch_mpr 86
+#define dbch_msacm 87
+#define dbch_msg 88
+#define dbch_nativefont 89
+#define dbch_nonclient 90
+#define dbch_ntdll 91
+#define dbch_ole 92
+#define dbch_pager 93
+#define dbch_palette 94
+#define dbch_pidl 95
+#define dbch_print 96
+#define dbch_process 97
+#define dbch_profile 98
+#define dbch_progress 99
+#define dbch_prop 100
+#define dbch_psapi 101
+#define dbch_psdrv 102
+#define dbch_rebar 103
+#define dbch_reg 104
+#define dbch_region 105
+#define dbch_relay 106
+#define dbch_resource 107
+#define dbch_s 108
+#define dbch_scroll 109
+#define dbch_security 110
+#define dbch_segment 111
+#define dbch_selector 112
+#define dbch_sem 113
+#define dbch_sendmsg 114
+#define dbch_shell 115
+#define dbch_shm 116
+#define dbch_snoop 117
+#define dbch_sound 118
+#define dbch_static 119
+#define dbch_statusbar 120
+#define dbch_stress 121
+#define dbch_string 122
+#define dbch_syscolor 123
+#define dbch_system 124
+#define dbch_tab 125
+#define dbch_task 126
+#define dbch_text 127
+#define dbch_thread 128
+#define dbch_thunk 129
+#define dbch_timer 130
+#define dbch_toolbar 131
+#define dbch_toolhelp 132
+#define dbch_tooltips 133
+#define dbch_trackbar 134
+#define dbch_treeview 135
+#define dbch_tweak 136
+#define dbch_uitools 137
+#define dbch_updown 138
+#define dbch_ver 139
+#define dbch_virtual 140
+#define dbch_vxd 141
+#define dbch_win 142
+#define dbch_win16drv 143
+#define dbch_win32 144
+#define dbch_wing 145
+#define dbch_winsock 146
+#define dbch_wnet 147
+#define dbch_x11 148
+#define dbch_x11drv 149
 /* Definitions for classes identifiers */
 #define dbcl_fixme 0
 #define dbcl_err 1
diff --git a/include/debugdefs.h b/include/debugdefs.h
index 42e6c92..964e2a9 100644
--- a/include/debugdefs.h
+++ b/include/debugdefs.h
@@ -4,7 +4,7 @@
 #include "debugtools.h"
 #endif
 
-#define DEBUG_CHANNEL_COUNT 148
+#define DEBUG_CHANNEL_COUNT 150
 #ifdef DEBUG_RUNTIME
 short debug_msg_enabled[][DEBUG_CLASS_COUNT] = {
 {1, 1, 0, 0},
@@ -155,6 +155,8 @@
 {1, 1, 0, 0},
 {1, 1, 0, 0},
 {1, 1, 0, 0},
+{1, 1, 0, 0},
+{1, 1, 0, 0},
 };
 const char* debug_ch_name[] = {
 "1",
@@ -183,6 +185,7 @@
 "console",
 "crtdll",
 "cursor",
+"datetime",
 "dc",
 "dde",
 "ddeml",
@@ -241,6 +244,7 @@
 "mmsys",
 "mmtime",
 "module",
+"monthcal",
 "mpr",
 "msacm",
 "msg",
diff --git a/include/monthcal.h b/include/monthcal.h
new file mode 100644
index 0000000..fbc501a
--- /dev/null
+++ b/include/monthcal.h
@@ -0,0 +1,21 @@
+/*
+ * Month calendar class extra info
+ *
+ * Copyright 1998 Eric Kohl
+ */
+
+#ifndef __WINE_MONTHCAL_H
+#define __WINE_MONTHCAL_H
+
+typedef struct tagMONTHCAL_INFO
+{
+    DWORD dwDummy;  /* just to keep the compiler happy ;-) */
+
+
+} MONTHCAL_INFO, *LPMONTHCAL_INFO;
+
+
+extern VOID MONTHCAL_Register (VOID);
+extern VOID MONTHCAL_Unregister (VOID);
+
+#endif  /* __WINE_MONTHCAL_H */