Release 970329

Fri Mar 28 14:18:32 1997  Alexandre Julliard  <julliard@lrc.epfl.ch>

	* [misc/main.c] [ANNOUNCE]
	Update the list of contributors. Please let me know if I forgot
	someone.

	* [controls/combo.c]
	Fixed bug in CB_DIR16 handling.
	Use correct text color in CBPaintText.

	* [controls/listbox.c]
	Fixed WM_CTLCOLOR handling.

	* [windows/winproc.c]
	Added translation for EM_*32 messages.

Mon Mar 24 01:31:52 1997  Steffen Moeller <moeller@mpimg-berlin-dahlem.mpg.de>

	* [files/drive.c]
	Added information on device and inode numbers to the DOSDRIVE
	struct, using it to find DOS drives in a path even if it contains
	symbolic links, eliminating annoying messages at startup.  
	Edited functions DRIVE_Init and rewrote DRIVE_FindDriveRoot.

Wed Mar 19 16:31:18 1997  John Harvey <john@division.co.uk>

	* [graphics/win16drv/font.c] [graphics/win16drv/init.c]
	  [graphics/x11drv/font.c] [objects/font.c] [include/gdi.h]
	  [include/win16drv.h] [include/x11drv.h]
	Implemented GetCharWidth via graphics drivers.

	* [graphics/win16drv/Makefile.in] [graphics/win16drv/prtdrv.c]
	Moved printer driver interfaces into a separate file.

	* [graphics/win16drv/text.c]
	Fixed bugs that seg-faulted write.

Wed Mar 19 13:52:41 1997  Alex Korobka <alex@trantor.pharm.sunysb.edu>

	* [BUGS]
	Update.

	* [controls/edit.c]
	Removed useless parameters from a lot of functions.

	* [controls/menu.c]
	Improved keyboard shortcuts. Added check for entries with popup 
	menu in EnableMenuItem().

	* [windows/winproc.c] [windows/win.c] [memory/selector.c]
	Do not allocate separate thunks for new windows.

	* [misc/clipboard.c] [windows/painting.c]
	Fixed problems with ClipBook.

        * [controls/combo.c] [controls/edit.c] [controls/listbox.c]
	  [controls/widgets.c] [windows/graphics.c] [windows/defdlg.c]
        Combo rewrite.

	* [objects/dib.c]
	Slight improvements.

Wed Mar 19 11:21:17 1997  Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>

	* [misc/crtdll.c]
	Added chdir/mkdir.

	* [misc/ntdll.c]
	Fixed some bugs, added RtlUnicodeStringToAnsiString.

	* [win32/process.c]
	Added initialisation of events/semaphores/mutices.

Wed Mar 19 01:55:40 1997  Ricardo R. Massaro <massaro@ime.usp.br>

	* [resources/sysres_Po.rc]
	Added support for Portuguese language.

Sat Mar 18 18:00:14 1997  Uwe Bonnes  <bon@elektron.ikp.physik.th-darmstadt.de>

	* [windows/winpos.c] [if1632/user.spec] [if1632/user32.spec]
	Implemented SwitchToThisWindow().
	
	* [misc/ver.c]
	Corrected a flaw in VerInstallFile32A.
	
	* [msdos/int21.c]
	Corrected wrong number in Int21 3305
	Corrected Int21 714e, implemented Int21 7160,CL=2, 7143 and 7147
	
Sun Mar 16 09:53:04 1997  Andreas Mohr <100.30936@germany.net>

	* [loader/ne_module.c]
	Fixed NE_LoadSegments() to set size to pSeg->minsize rather than
	setting it to 0x10000 if pSeg->size is 0.

Thu Mar 13 12:15:00 1997  Anand Kumria <akumria@ozemail.com.au>

	* [ANNOUNCE]
	Added ftp.progsoc.uts.edu.au as a mirror of Wine.

	* [memory/global.c]
	Removed MemManInfo sizeof check.

Mon Mar 10 10:35:44 MET 1997 Sven Verdoolaege <skimo@breughel.ufsia.ac.be>

	* [files/dos_fs.c]
	Pick up kernel dirent on glibc systems.

	* [loader/signal.c]
	Pick up kernel sigaction on glibc systems.

Sat Mar  8 21:05:37 1997  Jimen Ching  <jching@aloha.com>

	* [debugger/stabs.c] [debugger/msc.c]
	Check return value of mmap.

Fri Mar  7 05:42:03 1997  Lee Jaekil <juria@seodu.co.kr>

	* [win32/code_page.c]
	Added IsValidCodePage.
diff --git a/include/combo.h b/include/combo.h
index 82fe86c..7060bdb 100644
--- a/include/combo.h
+++ b/include/combo.h
@@ -2,20 +2,55 @@
  * Combo box definitions
  */
 
+#ifndef __WINE_COMBO_H
+#define __WINE_COMBO_H
 
-typedef struct {
-  WND*	  wndSelf;
-  DWORD   dwStyle;
-  DWORD   dwState;
-  HWND16  hWndEdit;
-  HWND16  hWndLBox;
-  WORD    LBoxTop;
-  BOOL16  DropDownVisible;
-  short   LastSel;
-  RECT16  RectEdit;
-  RECT16  RectButton;
-  BOOL16  bRedrawFlag;
+#define ID_CB_LISTBOX           1000
+#define ID_CB_EDIT              1001
+
+/* Internal flags */
+
+#define CBF_DROPPED             0x0001
+#define CBF_BUTTONDOWN          0x0002
+#define CBF_NOROLLUP            0x0004
+#define CBF_MEASUREITEM		0x0008
+#define CBF_FOCUSED             0x0010
+#define CBF_CAPTURE             0x0020
+#define CBF_EDIT                0x0040
+#define CBF_NORESIZE		0x0080
+#define CBF_EUI                 0x8000
+
+/* Combo state struct */
+
+typedef struct
+{
+   WND*    	self;
+   HWND32  	owner;
+   UINT32  	dwStyle;
+   HWND32  	hWndEdit;
+   HWND32  	hWndLBox;
+   UINT16  	wState;
+   HFONT16 	hFont;
+   RECT16  	RectCombo;
+   RECT16  	RectEdit;
+   RECT16  	RectButton;
+   INT32   	droppedWidth;		/* last two are not used unless set */
+   INT32   	editHeight;		/* explicitly */
 } HEADCOMBO,*LPHEADCOMBO;
 
-LRESULT ComboBoxWndProc(HWND16 hwnd, UINT16 message, WPARAM16 wParam, LPARAM lParam);
-LRESULT ComboLBoxWndProc(HWND16 hwnd, UINT16 message, WPARAM16 wParam, LPARAM lParam);
+/*
+ * Note, that CBS_DROPDOWNLIST style is actually (CBS_SIMPLE | CBS_DROPDOWN)!
+ */
+
+#define CB_GETTYPE( lphc )    ((lphc)->dwStyle & (CBS_DROPDOWNLIST))
+#define CB_DISABLED( lphc )   ((lphc)->self->dwStyle & WS_DISABLED)
+#define CB_OWNERDRAWN( lphc ) ((lphc)->dwStyle & (CBS_OWNERDRAWFIXED | CBS_OWNERDRAWVARIABLE))
+#define CB_HASSTRINGS( lphc ) ((lphc)->dwStyle & CBS_HASSTRINGS)
+#define CB_HWND( lphc )       ((lphc)->self->hwndSelf)
+
+BOOL32 	COMBO_FlipListbox( LPHEADCOMBO, BOOL32 );
+HWND32 	COMBO_GetLBWindow( WND* );
+LRESULT COMBO_Directory( LPHEADCOMBO, UINT32, LPSTR, BOOL32 );
+
+#endif /* __WINE_COMBO_H */
+
diff --git a/include/dialog.h b/include/dialog.h
index a9db72e..ac3a14d 100644
--- a/include/dialog.h
+++ b/include/dialog.h
@@ -28,15 +28,17 @@
     HWND16      hwndFocus;   /* Current control with focus */
     HFONT16     hUserFont;   /* Dialog font */
     HMENU16     hMenu;       /* Dialog menu */
-    WORD        xBaseUnit;   /* Dialog units (depends on the font) */
-    WORD        yBaseUnit;
+    UINT16      xBaseUnit;   /* Dialog units (depends on the font) */
+    UINT16      yBaseUnit;
     INT32	idResult;    /* EndDialog() result / default pushbutton ID */
-    WORD        fEnd;        /* EndDialog() called for this dialog */
+    UINT16      flags;       /* EndDialog() called for this dialog */
     HGLOBAL16   hDialogHeap;
 } DIALOGINFO;
 
 #pragma pack(4)
 
+#define DF_END  0x0001
+
 extern BOOL32 DIALOG_Init(void);
 extern HWND32 DIALOG_CreateIndirect( HINSTANCE32 hInst, LPCSTR dlgTemplate,
                                      BOOL32 win32Template, HWND32 owner,
diff --git a/include/gdi.h b/include/gdi.h
index ad48849..8403005 100644
--- a/include/gdi.h
+++ b/include/gdi.h
@@ -158,6 +158,7 @@
     INT32      (*pExcludeVisRect)(DC*,INT32,INT32,INT32,INT32);
     BOOL32     (*pExtFloodFill)(DC*,INT32,INT32,COLORREF,UINT32);
     BOOL32     (*pExtTextOut)(DC*,INT32,INT32,UINT32,const RECT32*,LPCSTR,UINT32,const INT32*);
+    BOOL32     (*pGetCharWidth)(DC*,UINT32,UINT32,LPINT32);
     COLORREF   (*pGetPixel)(DC*,INT32,INT32);
     BOOL32     (*pGetTextExtentPoint)(DC*,LPCSTR,INT32,LPSIZE32);
     BOOL32     (*pGetTextMetrics)(DC*,TEXTMETRIC32A*);
diff --git a/include/graphics.h b/include/graphics.h
index 9ffdbb3..6d933fd 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -13,8 +13,13 @@
 extern void GRAPH_DrawReliefRect( HDC32 hdc, const RECT32 *rect,
                                   INT32 highlight_size, INT32 shadow_size,
                                   BOOL32 pressed );
+extern BOOL32 GRAPH_DrawLines( HDC32 hdc, LPPOINT32 pXY, INT32 N, HPEN32 hPen);
+extern void GRAPH_DrawRectangle( HDC32 hdc, INT32 x, INT32 y, 
+				 INT32 width, INT32 height, HPEN32 hPen);
 extern BOOL32 GRAPH_DrawBitmap( HDC32 hdc, HBITMAP32 hbitmap,
-                                int xdest, int ydest, int xsrc, int ysrc,
-                                int width, int height );
+                                INT32 xdest, INT32 ydest, INT32 xsrc,
+                                INT32 ysrc, INT32 width, INT32 height );
+extern BOOL32 GRAPH_SelectClipMask( HDC32 hdc, HBITMAP32 hMono,
+                                    INT32 x, INT32 y );
 
 #endif /* __WINE_GRAPHICS_H */
diff --git a/include/options.h b/include/options.h
index 3f051d6..36bfb5c 100644
--- a/include/options.h
+++ b/include/options.h
@@ -24,7 +24,8 @@
     LANG_It,  /* Italian */
     LANG_Ko,  /* Korean */
     LANG_Hu,  /* Hungarian */
-    LANG_Pl   /* Polish */
+    LANG_Pl,  /* Polish */
+    LANG_Po   /* Portuguese */
 } WINE_LANGUAGE;
 
 typedef struct
diff --git a/include/pe_image.h b/include/pe_image.h
index 12f6895..433bcdc 100644
--- a/include/pe_image.h
+++ b/include/pe_image.h
@@ -23,15 +23,15 @@
 extern int PE_unloadImage(HMODULE32 hModule);
 extern FARPROC32 PE_FindExportedFunction(struct pe_data *pe, LPCSTR funcName);
 extern void my_wcstombs(char * result, u_short * source, int len);
-extern PE_EnumResourceTypes32A(HMODULE32,ENUMRESTYPEPROC32A,LONG);
-extern PE_EnumResourceTypes32W(HMODULE32,ENUMRESTYPEPROC32W,LONG);
-extern PE_EnumResourceNames32A(HMODULE32,LPCSTR,ENUMRESNAMEPROC32A,LONG);
-extern PE_EnumResourceNames32W(HMODULE32,LPCWSTR,ENUMRESNAMEPROC32W,LONG);
-extern PE_EnumResourceLanguages32A(HMODULE32,LPCSTR,LPCSTR,ENUMRESLANGPROC32A,LONG);
-extern PE_EnumResourceLanguages32W(HMODULE32,LPCWSTR,LPCWSTR,ENUMRESLANGPROC32W,LONG);
+extern BOOL32 PE_EnumResourceTypes32A(HMODULE32,ENUMRESTYPEPROC32A,LONG);
+extern BOOL32 PE_EnumResourceTypes32W(HMODULE32,ENUMRESTYPEPROC32W,LONG);
+extern BOOL32 PE_EnumResourceNames32A(HMODULE32,LPCSTR,ENUMRESNAMEPROC32A,LONG);
+extern BOOL32 PE_EnumResourceNames32W(HMODULE32,LPCWSTR,ENUMRESNAMEPROC32W,LONG);
+extern BOOL32 PE_EnumResourceLanguages32A(HMODULE32,LPCSTR,LPCSTR,ENUMRESLANGPROC32A,LONG);
+extern BOOL32 PE_EnumResourceLanguages32W(HMODULE32,LPCWSTR,LPCWSTR,ENUMRESLANGPROC32W,LONG);
 extern HRSRC32 PE_FindResourceEx32W(HINSTANCE32,LPCWSTR,LPCWSTR,WORD);
 extern DWORD PE_SizeofResource32(HINSTANCE32,HRSRC32);
 extern HGLOBAL32 PE_LoadResource32(HINSTANCE32,HRSRC32);
-extern void PE_InitializeDLLs(HMODULE16);
+extern void PE_InitializeDLLs(HMODULE16,DWORD,LPVOID);
 
 #endif /* __WINE_PE_IMAGE_H */
diff --git a/include/win.h b/include/win.h
index 0179249..aabfe63 100644
--- a/include/win.h
+++ b/include/win.h
@@ -28,6 +28,21 @@
 #define WINSWITCH_CLASS_ATOM MAKEINTATOM(32771)  /* WinSwitch */
 #define ICONTITLE_CLASS_ATOM MAKEINTATOM(32772)  /* IconTitle */
 
+/* Built-in 32-bit classes */
+typedef enum
+{
+    BIC32_BUTTON,
+    BIC32_EDIT,
+    BIC32_LISTBOX,
+    BIC32_COMBO,
+    BIC32_COMBOLB,
+    BIC32_POPUPMENU,
+    BIC32_SCROLL,
+    BIC32_DESKTOP,
+    BIC32_DIALOG,
+    BIC32_NB_CLASSES
+} BUILTIN_CLASS32;
+
   /* PAINT_RedrawWindow() control flags */
 #define RDW_C_USEHRGN		0x0001
 #define RDW_C_DELETEHRGN	0x0002
@@ -108,6 +123,8 @@
                                   HRGN32 hrgnUpdate, UINT32 flags,
                                   UINT32 control );    /* windows/painting.c */
 
+extern BOOL32 WIDGETS_IsControl32( WND* pWnd, BUILTIN_CLASS32 cls );  /* controls/widgets.c */
+
 extern Display * display;
 extern Screen * screen;
 extern Window rootWindow;
diff --git a/include/win16drv.h b/include/win16drv.h
index 6b2c8a8..04df416 100644
--- a/include/win16drv.h
+++ b/include/win16drv.h
@@ -152,8 +152,34 @@
     SEGPTR	segptrFontInfo; /* Current font realized by printer driver */
 } WIN16DRV_PDEVICE;
 
+/*
+ * Printer driver functions
+ */
+typedef SEGPTR LPPDEVICE;
+LOADED_PRINTER_DRIVER *LoadPrinterDriver(const char *pszDriver);
+
+extern INT16 PRTDRV_Control(LPPDEVICE lpDestDev, WORD wfunction, SEGPTR lpInData, SEGPTR lpOutData);
+extern WORD PRTDRV_Enable(LPVOID lpDevInfo, WORD wStyle, LPCSTR  lpDestDevType, 
+                          LPCSTR lpDeviceName, LPCSTR lpOutputFile, LPVOID lpData);
+extern WORD PRTDRV_EnumDFonts(LPPDEVICE lpDestDev, LPSTR lpFaceName,  
+		       FARPROC16 lpCallbackFunc, LPVOID lpClientData);
+extern DWORD PRTDRV_RealizeObject(LPPDEVICE lpDestDev, WORD wStyle, 
+				  LPVOID lpInObj, LPVOID lpOutObj,
+				  LPTEXTXFORM16 lpTextXForm);
+
+extern BOOL16 PRTDRV_EnumObj(LPPDEVICE lpDestDev, WORD iStyle, FARPROC16 lpfn, LPVOID lpb);
+extern DWORD PRTDRV_ExtTextOut(LPPDEVICE lpDestDev, WORD wDestXOrg, WORD wDestYOrg,
+			       RECT16 *lpClipRect, LPCSTR lpString, WORD wCount, 
+			       SEGPTR lpFontInfo, LPDRAWMODE lpDrawMode, 
+			       LPTEXTXFORM16 lpTextXForm, SHORT *lpCharWidths,
+			       RECT16 *     lpOpaqueRect, WORD wOptions);
+
+
 /* Wine driver functions */
 
+extern BOOL32 WIN16DRV_GetCharWidth( struct tagDC *dc, UINT32 firstChar, UINT32 lastChar,
+				   LPINT32 buffer );
+
 extern BOOL32 WIN16DRV_GetTextExtentPoint( DC *dc, LPCSTR str, INT32 count,
                                            LPSIZE32 size );
 extern BOOL32 WIN16DRV_GetTextMetrics( DC *dc, TEXTMETRIC32A *metrics );
@@ -164,4 +190,5 @@
 extern HGDIOBJ32 WIN16DRV_SelectObject( DC *dc, HGDIOBJ32 handle );
 
 
+
 #endif  /* __WINE_WIN16DRV_H */
diff --git a/include/windows.h b/include/windows.h
index 6448f63..e55bf16 100644
--- a/include/windows.h
+++ b/include/windows.h
@@ -3300,6 +3300,10 @@
 #define CBS_NOINTEGRALHEIGHT  0x0400L
 #define CBS_DISABLENOSCROLL   0x0800L
 
+#define CBS_UPPERCASE	      0x2000L
+#define CBS_LOWERCASE	      0x4000L
+
+
 /* Combo box messages */
 #define CB_GETEDITSEL16            (WM_USER+0)
 #define CB_GETEDITSEL32            0x0140
@@ -4777,6 +4781,10 @@
 #define	C3_ALPHA		0x8000
 #define	C3_NOTAPPLICABLE	0x0000
 
+/* flags that can be passed to LoadLibraryEx */
+#define	DONT_RESOLVE_DLL_REFERENCES	0x00000001
+#define	LOAD_LIBRARY_AS_DATAFILE	0x00000002
+#define	LOAD_WITH_ALTERED_SEARCH_PATH	0x00000008
 
 #pragma pack(4)
 
@@ -4918,7 +4926,6 @@
 VOID       Yield(void);
 
 /* Declarations for functions that exist only in Win32 */
-
 BOOL32     Beep(DWORD,DWORD);
 BOOL32     ClearCommError(INT32,LPDWORD,LPCOMSTAT);
 BOOL32     CloseHandle(HANDLE32);
@@ -4926,12 +4933,21 @@
 BOOL32     CopyFile32W(LPCWSTR,LPCWSTR,BOOL32);
 #define    CopyFile WINELIB_NAME_AW(CopyFile)
 INT32      CompareFileTime(LPFILETIME,LPFILETIME);
+HANDLE32   CreateEvent32A(LPSECURITY_ATTRIBUTES,BOOL32,BOOL32,LPCSTR);
+HANDLE32   CreateEvent32W(LPSECURITY_ATTRIBUTES,BOOL32,BOOL32,LPCWSTR);
+#define    CreateEvent WINELIB_NAME_AW(CreateEvent)
 HFILE32    CreateFile32A(LPCSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE32);
 HFILE32    CreateFile32W(LPCWSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE32);
 #define    CreateFile WINELIB_NAME_AW(CreateFile)
 HANDLE32   CreateFileMapping32A(HANDLE32,LPSECURITY_ATTRIBUTES,DWORD,DWORD,DWORD,LPCSTR);
 HANDLE32   CreateFileMapping32W(HANDLE32,LPSECURITY_ATTRIBUTES,DWORD,DWORD,DWORD,LPCWSTR);
 #define    CreateFileMapping WINELIB_NAME_AW(CreateFileMapping)
+HANDLE32   CreateMutex32A(LPSECURITY_ATTRIBUTES,BOOL32,LPCSTR);
+HANDLE32   CreateMutex32W(LPSECURITY_ATTRIBUTES,BOOL32,LPCWSTR);
+#define    CreateMutex WINELIB_NAME_AW(CreateMutex)
+HANDLE32   CreateSemaphore32A(LPSECURITY_ATTRIBUTES,LONG,LONG,LPCSTR);
+HANDLE32   CreateSemaphore32W(LPSECURITY_ATTRIBUTES,LONG,LONG,LPCWSTR);
+#define    CreateSemaphore WINELIB_NAME_AW(CreateSemaphore)
 BOOL32     DosDateTimeToFileTime(WORD,WORD,LPFILETIME);
 INT32      EnumPropsEx32A(HWND32,PROPENUMPROCEX32A,LPARAM);
 INT32      EnumPropsEx32W(HWND32,PROPENUMPROCEX32W,LPARAM);
@@ -5024,6 +5040,8 @@
 BOOL32     IsWindowUnicode(HWND32);
 BOOL32     IsValidLocale(DWORD,DWORD);
 BOOL32     LocalFileTimeToFileTime(const FILETIME*,LPFILETIME);
+SEGPTR     MapLS(LPVOID);
+LPVOID     MapSL(SEGPTR);
 LPVOID     MapViewOfFile(HANDLE32,DWORD,DWORD,DWORD,DWORD);
 LPVOID     MapViewOfFileEx(HANDLE32,DWORD,DWORD,DWORD,DWORD,LPVOID);
 INT32      MessageBoxEx32A(HWND32,LPCSTR,LPCSTR,UINT32,WORD);
@@ -5032,9 +5050,18 @@
 BOOL32     MoveFile32A(LPCSTR,LPCSTR);
 BOOL32     MoveFile32W(LPCWSTR,LPCWSTR);
 #define    MoveFile WINELIB_NAME_AW(MoveFile)
+HANDLE32   OpenEvent32A(DWORD,BOOL32,LPCSTR);
+HANDLE32   OpenEvent32W(DWORD,BOOL32,LPCWSTR);
+#define    OpenEvent WINELIB_NAME_AW(OpenEvent)
 HANDLE32   OpenFileMapping32A(DWORD,BOOL32,LPCSTR);
 HANDLE32   OpenFileMapping32W(DWORD,BOOL32,LPCWSTR);
 #define    OpenFileMapping WINELIB_NAME_AW(OpenFileMapping)
+HANDLE32   OpenMutex32A(DWORD,BOOL32,LPCSTR);
+HANDLE32   OpenMutex32W(DWORD,BOOL32,LPCWSTR);
+#define    OpenMutex WINELIB_NAME_AW(OpenMutex)
+HANDLE32   OpenSemaphore32A(DWORD,BOOL32,LPCSTR);
+HANDLE32   OpenSemaphore32W(DWORD,BOOL32,LPCWSTR);
+#define    OpenSemaphore WINELIB_NAME_AW(OpenSemaphore)
 DWORD      QueryDosDevice32A(LPCSTR,LPSTR,DWORD);
 DWORD      QueryDosDevice32W(LPCWSTR,LPWSTR,DWORD);
 #define    QueryDosDevice WINELIB_NAME_AW(QueryDosDevice)
@@ -5059,6 +5086,7 @@
 DWORD      RegQueryInfoKey32A(HKEY,LPSTR,LPDWORD,LPDWORD,LPDWORD,LPDWORD,
                             LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPDWORD,LPFILETIME);
 #define    RegQueryInfoKey WINELIB_NAME_AW(RegQueryInfoKey)
+BOOL32     ReleaseSemaphore(HANDLE32,LONG,LPLONG);
 VOID       RtlFillMemory(LPVOID,UINT32,UINT32);
 VOID       RtlMoveMemory(LPVOID,LPCVOID,UINT32);
 VOID       RtlZeroMemory(LPVOID,UINT32);
@@ -5091,6 +5119,7 @@
 BOOL32     TlsFree(DWORD);
 LPVOID     TlsGetValue(DWORD);
 BOOL32     TlsSetValue(DWORD,LPVOID);
+VOID       UnMapLS(SEGPTR);
 BOOL32     UnmapViewOfFile(LPVOID);
 LPVOID     VirtualAlloc(LPVOID,DWORD,DWORD,DWORD);
 BOOL32     VirtualFree(LPVOID,DWORD,DWORD);
@@ -6474,6 +6503,9 @@
 HGLOBAL16  LockSegment16(HGLOBAL16);
 #define    LockSegment32(handle) GlobalFix32((HANDLE32)(handle))
 #define    LockSegment WINELIB_NAME(LockSegment)
+BOOL16     LockWindowUpdate16(HWND16);
+BOOL32     LockWindowUpdate32(HWND32);
+#define    LockWindowUpdate WINELIB_NAME(LockWindowUpdate)
 BOOL16     LPtoDP16(HDC16,LPPOINT16,INT16);
 BOOL32     LPtoDP32(HDC32,LPPOINT32,INT32);
 #define    LPtoDP WINELIB_NAME(LPtoDP)
@@ -7051,6 +7083,9 @@
 BOOL16     SwapMouseButton16(BOOL16);
 BOOL32     SwapMouseButton32(BOOL32);
 #define    SwapMouseButton WINELIB_NAME(SwapMouseButton)
+VOID       SwitchToThisWindow16(HWND16,BOOL16);
+VOID       SwitchToThisWindow32(HWND32,BOOL32);
+#define    SwitchToThisWindow WINELIB_NAME(SwitchToThisWindow)
 INT16      SyncAllVoices16(void);
 DWORD      SyncAllVoices32(void);
 #define    SyncAllVoices WINELIB_NAME(SyncAllVoices)
diff --git a/include/winproc.h b/include/winproc.h
index 1a5ba11..7a1c696 100644
--- a/include/winproc.h
+++ b/include/winproc.h
@@ -17,13 +17,20 @@
     WIN_PROC_32W
 } WINDOWPROCTYPE;
 
+typedef enum
+{
+    WIN_PROC_CLASS,
+    WIN_PROC_WINDOW,
+    WIN_PROC_TIMER
+} WINDOWPROCUSER;
+
 typedef void *HWINDOWPROC;  /* Really a pointer to a WINDOWPROC */
 
 extern BOOL32 WINPROC_Init(void);
 extern WNDPROC16 WINPROC_GetProc( HWINDOWPROC proc, WINDOWPROCTYPE type );
 extern BOOL32 WINPROC_SetProc( HWINDOWPROC *pFirst, WNDPROC16 func,
-                               WINDOWPROCTYPE type );
-extern void WINPROC_FreeProc( HWINDOWPROC proc );
+                               WINDOWPROCTYPE type, WINDOWPROCUSER user );
+extern void WINPROC_FreeProc( HWINDOWPROC proc, WINDOWPROCUSER user );
 extern WINDOWPROCTYPE WINPROC_GetProcType( HWINDOWPROC proc );
 
 extern INT32 WINPROC_MapMsg32ATo32W( UINT32 msg, WPARAM32 wParam,
@@ -51,8 +58,8 @@
 extern void WINPROC_UnmapMsg16To32W( UINT32 msg, WPARAM32 wParam,
                                      LPARAM lParam );
 extern void WINPROC_UnmapMsg32ATo16( UINT32 msg, WPARAM16 wParam,
-                                     LPARAM lParam );
+                                     LPARAM lParam, LRESULT lResult );
 extern void WINPROC_UnmapMsg32WTo16( UINT32 msg, WPARAM16 wParam,
-                                     LPARAM lParam );
+                                     LPARAM lParam, LRESULT lResult );
 
 #endif  /* __WINE_WINPROC_H */
diff --git a/include/x11drv.h b/include/x11drv.h
index a08831e..26336c9 100644
--- a/include/x11drv.h
+++ b/include/x11drv.h
@@ -53,6 +53,8 @@
 extern BOOL32 X11DRV_BitBlt( struct tagDC *dcDst, INT32 xDst, INT32 yDst,
                              INT32 width, INT32 height, struct tagDC *dcSrc,
                              INT32 xSrc, INT32 ySrc, DWORD rop );
+extern BOOL32 X11DRV_GetCharWidth( struct tagDC *dc, UINT32 firstChar,
+                                   UINT32 lastChar, LPINT32 buffer );
 extern BOOL32 X11DRV_GetTextExtentPoint( struct tagDC *dc, LPCSTR str,
                                          INT32 count, LPSIZE32 size );
 extern BOOL32 X11DRV_GetTextMetrics(struct tagDC *dc, TEXTMETRIC32A *metrics);