diff --git a/ChangeLog b/ChangeLog
index d446171..87a97a5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,45 @@
+----------------------------------------------------------------------
+May 1, 94 martin2@trgcorp.solucorp.qc.ca (Martin Ayotte)
+
+	* [loader/signal.c]
+	Add XUngrabPointer() & XUngrabServer() in wine_fault().
+
+Fri Apr 22 19:30:08 1994  Erik Bos (erik@trashcan.hacktic.nl)
+
+	* [objects/bitblt.c]
+	color_stretch() rewritten to use ints only. *fast!*
+	BLACKONWHITE & WHITEONBLACK stretchmodes redirected to
+	use color_stretch().
+
+Mon May  2 21:39:43 1994  Erik Bos (erik@trashcan.hacktic.nl)
+
+	* [controls/menu.c]
+	SetSysMenu() added.
+
+	* [misc/cursor.c]
+	GetCursor() added.
+
+	* [misc/main.c]
+	SwapMouseButton() added, (NOP).
+
+	* [windows/win.c]
+	GetDesktopHwnd() added.
+
+	* [if1632/*spec]
+	Added not implemented functions defs as comment.
+
+	* [misc/winsocket.c]
+	Change WSAGetXbyY() functions to non-blocking ones,
+	Added WSAAsyncSelect(). 
+	(WSA functions can't be canceled yet).
+
+Wed Apr 20 23:58:58 1994  Scott A. Laird  (scott@curly)
+
+	* misc/profile.c: Fixed bug with GetIniFileName returning wrong
+	path when given a simple file name.  Fixed GetSetProfile to allow
+	enumerating all key names when KeyName is null.
+
+----------------------------------------------------------------------
 Wed Apr 20 14:53:35 1994  Bob Amstadt  (bob@pooh)
 
 	* [tools/build.c] [if1632/call.S] [if1632/Imakefile]
diff --git a/README b/README
index 4e3c6a3..668a0c6 100644
--- a/README
+++ b/README
@@ -171,6 +171,12 @@
 
 7. WHAT'S NEW
 
+WHAT'S NEW with Wine-940505: (see ChangeLog for details)
+	- faster color_stretch()
+	- SetSysMenu(), GetCursor(), GetDesktopWindow()
+	- WSAGetXbyY() now non-blocking	
+	- and many many bug fixes!
+
 WHAT'S NEW with Wine-940420: (see ChangeLog for details)
 	- new property functions
 	- new listbox and combo box functions
diff --git a/autoconf.h b/autoconf.h
index e6e34a8..223fbc1 100644
--- a/autoconf.h
+++ b/autoconf.h
@@ -1,6 +1,2 @@
 /* autoconf.h generated automatically.  Run Configure. */
-
-
-
-#define WINE_INI_GLOBAL "/home/alex/wine/wine.conf"
-#define AutoDefines  
+#error You must run Configure before you can build the makefiles.
diff --git a/controls/menu.c b/controls/menu.c
index 7a79e9f..00cc095 100644
--- a/controls/menu.c
+++ b/controls/menu.c
@@ -1924,6 +1924,17 @@
 	return wndPtr->hSysMenu;
 }
 
+/**********************************************************************
+ *			SetSystemMenu		[USER.280]
+ */
+BOOL SetSystemMenu(HWND hWnd, HMENU newHmenu)
+{
+	WND	*wndPtr;
+
+	if ((wndPtr = WIN_FindWndPtr(hWnd)) != NULL)
+		wndPtr->hSysMenu = newHmenu;
+}
+
 
 /**********************************************************************
  *			GetMenu		[USER.157]
diff --git a/if1632/gdi.spec b/if1632/gdi.spec
index 027100e..9a87ccc 100644
--- a/if1632/gdi.spec
+++ b/if1632/gdi.spec
@@ -50,11 +50,15 @@
            StretchBlt(1 2 3 4 5 6 7 8 9 10 11)
 36  pascal Polygon (word ptr word) Polygon (1 2 3)
 37  pascal Polyline (word ptr word) Polyline (1 2 3)
+#38  pascal Escape
 39  pascal RestoreDC(word s_word) RestoreDC(1 2)
 40  pascal FillRgn(word word word) FillRgn(1 2 3)
+#41  pascal FrameRgn
+#42  pascal InvertRgn
 43  pascal PaintRgn(word word) PaintRgn(1 2)
 44  pascal SelectClipRgn(word word) SelectClipRgn(1 2)
 45  pascal SelectObject(word word) SelectObject(1 2)
+#46  pascal __GP?
 47  pascal CombineRgn(word word word word) CombineRgn(1 2 3 4)
 48  pascal CreateBitmap(word word word word ptr) CreateBitmap(1 2 3 4 5)
 49  pascal CreateBitmapIndirect(ptr) CreateBitmapIndirect(1)
@@ -81,6 +85,7 @@
 68  pascal DeleteDC(word) DeleteDC(1)
 69  pascal DeleteObject(word) DeleteObject(1)
 70  pascal EnumFonts(word ptr ptr ptr) EnumFonts(1 2 3 4)
+#71  pascal EnumObjects
 72  pascal EqualRgn(word word) EqualRgn(1 2)
 73  pascal ExcludeVisRect(word s_word s_word s_word s_word)
 	   ExcludeVisRect(1 2 3 4 5)
@@ -102,6 +107,7 @@
 89  pascal GetTextCharacterExtra(word) GetTextCharacterExtra(1)
 90  pascal GetTextColor(word) GetTextColor(1)
 91  pascal GetTextExtent(word ptr s_word) GetTextExtent(1 2 3)
+#92  pascal GetTextFace
 93  pascal GetTextMetrics(word ptr) GetTextMetrics(1 2)
 94  pascal GetViewportExt(word) GetViewportExt(1)
 95  pascal GetViewportOrg(word) GetViewportOrg(1)
@@ -119,41 +125,141 @@
 105 pascal SelectVisRgn(word word) SelectVisRgn(1 2)
 106 pascal SetBitmapBits(word long ptr) SetBitmapBits(1 2 3)
 117 pascal SetDCOrg(word s_word s_word) SetDCOrg(1 2 3)
+#121 pascal Death
+#122 pascal ReSurRection
+#123 pascal PlayMetaFile
+#124 pascal GetMetaFile
+#125 pascal CreateMetaFile
+#126 pascal CloseMetaFile
+#127 pascal DeleteMetaFile
 128 pascal MulDiv(s_word s_word s_word) MulDiv(1 2 3)
 129 pascal SaveVisRgn(word) SaveVisRgn(1)
 130 pascal RestoreVisRgn(word) RestoreVisRgn(1)
 131 pascal InquireVisRgn(word) InquireVisRgn(1)
+#132 pascal SetEnvironment
+#133 pascal GetEnvironment
 134 pascal GetRgnBox(word ptr) GetRgnBox(1 2)
+#135 pascal ScanLr
+#136 pascal RemoveFontResource
 148 pascal SetBrushOrg(word s_word s_word) SetBrushOrg(1 2 3)
 149 pascal GetBrushOrg(word) GetBrushOrg(1)
 150 pascal UnrealizeObject(word) UnrealizeObject(1)
+#151 pascal CopyMetaFile
 153 pascal CreateIC(ptr ptr ptr ptr) CreateIC(1 2 3 4)
 154 pascal GetNearestColor(word long) GetNearestColor(1 2)
+#155 pascal QueryAbort
+#156 pascal CreateDiscardableBitmap
+#159 pascal GetMetaFileBits
+#160 pascal SetMetaFileBits
 161 pascal PtInRegion(word s_word s_word) PtInRegion(1 2 3)
 162 pascal GetBitmapDimension(word) GetBitmapDimension(1)
 163 pascal SetBitmapDimension(word s_word s_word) SetBitmapDimension(1 2 3)
+#169 pascal IsDCDirty
+#170 pascal SetDCStatus
 172 pascal SetRectRgn(word s_word s_word s_word s_word) SetRectRgn(1 2 3 4 5)
 173 pascal GetClipRgn(word) GetClipRgn(1)
+#175 pascal EnumMetaFile
 179 pascal GetDCState(word) GetDCState(1)
 180 pascal SetDCState(word word) SetDCState(1 2)
 181 pascal RectInRegionOld(word ptr) RectInRegion(1 2)
+#190 pascal SetDCHook
+#191 pascal GetDCHook
+#192 pascal SetHookFlags
+#193 pascal SetBoundsRect
+#194 pascal GetBoundsRect
+#195 pascal SelectBitmap
+#196 pascal SetMetaFileBitsBetter
+#201 pascal DMBITBLT
+#202 pascal DMCOLORINFO
+#206 pascal DMENUMDFONTS
+#207 pascal DMENUMOBJ
+#208 pascal DMOUTPUT
+#209 pascal DMPIXEL
+#210 pascal DMREALIZEOBJECT
+#211 pascal DMSTRBLT
+#212 pascal DMSCANLR
+#213 pascal BRUTE
+#214 pascal DMEXTTEXTOUT
+#215 pascal DMGETCHARWIDTH
+#216 pascal DMSTRETCHBLT
+#217 pascal DMDIBBITS
+#218 pascal DMSTRETCHDIBITS
+#219 pascal DMSETDIBTODEV
+#220 pascal DMTRANSPOSE
+#230 pascal CREATEPQ
+#231 pascal MINPQ
+#232 pascal EXTRACTPQ
+#233 pascal INSERTPQ
+#234 pascal SIZEPQ
+#235 pascal DELETEPQ
+#240 pascal OPENJOB
+#241 pascal WRITESPOOL
+#242 pascal WRITEDIALOG
+#243 pascal CLOSEJOB
+#244 pascal DELETEJOB
+#245 pascal GETSPOOLJOB
+#246 pascal STARTSPOOLPAGE
+#247 pascal ENDSPOOLPAGE
+#248 pascal QUERYJOB
 250 pascal Copy(ptr ptr word) Copy(1 2 3)
+#253 pascal DeleteSpoolPage
+#254 pascal SpoolFile
+#300 pascal ENGINEENUMERATEFONT
+#301 pascal ENGINEDELETEFONT
+#302 pascal ENGINEREALIZEFONT
+#303 pascal ENGINEGETCHARWIDTH
+#304 pascal ENGINESETFONTCONTEXT
+#305 pascal ENGINEGETGLYPHBMP
+#306 pascal ENGINEMAKEFONTDIR
+#307 pascal GETCHARABCWIDTHS
+#308 pascal GETOUTLINETEXTMETRICS
+#309 pascal GETGLYPHOUTLINE
+#310 pascal CREATESCALABLEFONTRESOURCE
+#311 pascal GETFONTDATA
+#312 pascal CONVERTOUTLINEFONTFILE
+#313 pascal GETRASTERIZERCAPS
+#314 pascal ENGINEEXTTEXTOUT
+#330 pascal ENUMFONTFAMILIES
+#332 pascal GETKERNINGPAIRS
 345 pascal GetTextAlign(word) GetTextAlign(1)
 346 pascal SetTextAlign(word word) SetTextAlign(1 2)
 348 pascal Chord(word s_word s_word s_word s_word s_word s_word s_word s_word)
 	   Chord(1 2 3 4 5 6 7 8 9)
 349 pascal SetMapperFlags(word word) SetMapperFlags(1 2)
 350 pascal GetCharWidth(word word word ptr) GetCharWidth(1 2 3 4)
+#351 pascal EXTTEXTOUT
+#352 pascal GETPHYSICALFONTHANDLE
+#353 pascal GETASPECTRATIOFILTER
+#354 pascal SHRINKGDIHEAP
 360 pascal CreatePalette(ptr) CreatePalette(1)
 361 pascal GDISelectPalette(word word) GDISelectPalette(1 2)
 362 pascal GDIRealizePalette(word) GDIRealizePalette(1)
 363 pascal GetPaletteEntries(word word word ptr) GetPaletteEntries(1 2 3 4)
 364 pascal SetPaletteEntries(word word word ptr) SetPaletteEntries(1 2 3 4)
 365 pascal RealizeDefaultPalette(word) RealizeDefaultPalette(1)
+#366 pascal UPDATECOLORS
+#367 pascal ANIMATEPALETTE
+#368 pascal RESIZEPALETTE
 370 pascal GetNearestPaletteIndex(word long) GetNearestPaletteIndex(1 2)
 375 pascal GetSystemPaletteEntries(word word word ptr)
 	   GetSystemPaletteEntries(1 2 3 4)
+#376 pascal RESETDC
+#377 pascal STARTDOC
+#378 pascal ENDDOC
+#379 pascal STARTPAGE
+#380 pascal ENDPAGE
+#381 pascal SETABORTPROC
+#382 pascal ABORTDOC
+#400 pascal FASTWINDOWFRAME
+#401 pascal GDIMOVEBITMAP
+#403 pascal GDIINIT2
+#405 pascal FINALGDIINIT
+#407 pascal CREATEUSERBITMAP
+#409 pascal CREATEUSERDISCARDABLEBITMAP
+#410 pascal ISVALIDMETAFILE
 411 pascal GetCurLogFont(word) GetCurLogFont(1)
+#412 pascal ISDCCURRENTPALETTE
+#439 pascal STRETCHDIBITS
 440 pascal SetDIBits(word word word word ptr ptr word) SetDIBits(1 2 3 4 5 6 7)
 441 pascal GetDIBits(word word word word ptr ptr word) GetDIBits(1 2 3 4 5 6 7)
 442 pascal CreateDIBitmap(word ptr long ptr ptr word)
@@ -163,10 +269,19 @@
 444 pascal CreateRoundRectRgn(s_word s_word s_word s_word s_word s_word)
 	   CreateRoundRectRgn(1 2 3 4 5 6)
 445 pascal CreateDIBPatternBrush(word word) CreateDIBPatternBrush(1 2)
+#449 pascal DEVICECOLORMATCH
+#450 pascal POLYPOLYGON
 451 pascal CreatePolyPolygonRgn(ptr ptr word word)
 	   CreatePolyPolygonRgn(1 2 3 4)
+#452 pascal GDISEEGDIDO
+#460 pascal GDITASKTERMINATION
+#461 pascal SETOBJECTOWNER
+#462 pascal ISGDIOBJECT
+#463 pascal MAKEOBJECTPRIVATE
+#464 pascal FIXUPBOGUSPUBLISHERMETAFILE
 465 pascal RectVisible(word ptr) RectVisible(1 2)
 466 pascal RectInRegion(word ptr) RectInRegion(1 2)
+#467 pascal UNICODETOANSI
 468 pascal GetBitmapDimensionEx(word ptr) GetBitmapDimensionEx(1 2)
 469 pascal GetBrushOrgEx(word ptr) GetBrushOrgEx(1 2)
 470 pascal GetCurrentPositionEx(word ptr) GetCurrentPositionEx(1 2)
@@ -189,3 +304,4 @@
 	   ScaleViewportExtEx(1 2 3 4 5 6)
 485 pascal ScaleWindowExtEx(word s_word s_word s_word s_word ptr)
 	   ScaleWindowExtEx(1 2 3 4 5 6)
+#486 pascal GETASPECTRATIOFILEREX
diff --git a/if1632/kernel.spec b/if1632/kernel.spec
index d21f57c..327e37c 100644
--- a/if1632/kernel.spec
+++ b/if1632/kernel.spec
@@ -4,6 +4,8 @@
 id	1
 length	415
 
+#1 FATALEXIT
+#2 EXITKERNEL
 3   pascal GetVersion() GetVersion()
 4   pascal LocalInit(word word word) WIN16_LocalInit(1 2 3)
 5   pascal LocalAlloc(word word) WIN16_LocalAlloc(1 2)
@@ -27,26 +29,43 @@
 23  pascal LockSegment(s_word) KERNEL_LockSegment(1)
 24  pascal UnlockSegment(s_word) KERNEL_UnlockSegment(1)
 25  pascal GlobalCompact(long) GlobalCompact(1)
-#29  pascal Yield() Yield()
+#26 GLOBALFREEALL
+#28 GLOBALMASTERHANDLE
+29  pascal Yield() Yield()
 30  pascal WaitEvent(word) KERNEL_WaitEvent(1)
+#31 POSTEVENT
+#32 SETPRIORITY
+#33 LOCKCURRENTTASK
 34  pascal SetTaskQueue(word word) SetTaskQueue(1 2)
 35  pascal GetTaskQueue(word) GetTaskQueue(1)
 36  pascal GetCurrentTask() GetCurrentTask()
+#37 GETCURRENTPDB
+#38 SETTASKSIGNALPROC
+#41 ENABLEDOS
+#42 DISABLEDOS
 45  pascal LoadModule(ptr ptr) LoadModule(1 2)
+#46 FREEMODULE
 47  pascal GetModuleHandle(ptr) GetModuleHandle(1)
 48  pascal GetModuleUsage(word) GetModuleUsage(1)
 49  pascal GetModuleFileName(word ptr s_word) GetModuleFileName(1 2 3)
 50  pascal GetProcAddress(word ptr) GetProcAddress(1 2)
 51  pascal MakeProcInstance(ptr word) CALLBACK_MakeProcInstance(1 2)
 52  pascal FreeProcInstance(ptr) FreeProcInstance(1)
+#53 CALLPROCINSTANCE
+#54 GETINSTANCEDATA
 55  pascal Catch(ptr) Catch (1)
 56  pascal Throw(ptr word) Throw(1 2)
+57  pascal GetProfileInt(ptr ptr word) GetProfileInt(1 2 3)
+58  pascal GetProfileString(ptr ptr ptr ptr word) GetProfileString(1 2 3 4 5)
 59  pascal WriteProfileString(ptr ptr ptr) WriteProfileString(1 2 3)
 60  pascal FindResource(word ptr ptr) FindResource(1 2 3)
 61  pascal LoadResource(word word) LoadResource(1 2)
 62  pascal LockResource(word) LockResource(1)
 63  pascal FreeResource(word) FreeResource(1)
 64  pascal AccessResource(word word) AccessResource(1 2)
+#65 SIZEOFRESOURCE
+#66 ALLOCRESOURCE
+#67 SETRESOURCEHANDLER
 68  pascal InitAtomTable(word) InitAtomTable(1)
 69  pascal FindAtom(ptr) FindAtom(1)
 70  pascal AddAtom(ptr) AddAtom(1)
@@ -54,12 +73,19 @@
 72  pascal GetAtomName(word ptr word) GetAtomName(1 2 3)
 73  pascal GetAtomHandle(word) GetAtomHandle(1)
 74  pascal OpenFile(ptr ptr word) OpenFile(1 2 3)
+#75 OPENPATHNAME
+#76 DELETEPATHNAME
+#77 RESERVED1
+#78 RESERVED2
+#79 RESERVED3
+#80 RESERVED4
 81  pascal _lclose(word) _lclose(1)
 82  pascal _lread(word ptr word) _lread(1 2 3)
 83  pascal _lcreate(ptr word) _lcreate(1 2)
 84  pascal _llseek(word long word) _llseek(1 2 3)
 85  pascal _lopen(ptr word) _lopen(1 2)
 86  pascal _lwrite(word ptr word) _lwrite(1 2 3)
+#87 RESERVED5
 88  pascal lstrcpy(ptr ptr) lstrcpy(1 2)
 89  pascal lstrcat(ptr ptr) lstrcat(1 2)
 90  pascal lstrlen(ptr) lstrlen(1)
@@ -67,56 +93,154 @@
 		      word word word word word) 
 	     KERNEL_InitTask()
 92  pascal GetTempDrive(byte) GetTempDrive(1)
+#93 GETCODEHANDLE
+#94 DEFINEHANDLETABLE
 95  pascal LoadLibrary(ptr) LoadLibrary(1)
 96  pascal FreeLibrary(word) FreeLibrary(1)
 97  pascal GetTempFileName(byte ptr word ptr) GetTempFileName(1 2 3 4)
+#98 GETLASTDISKCHANGE
+#99 GETLPERRMODE
+#100 VALIDATECODESEGMENTS
+#101 NOHOOKDOSCALL
 102 register DOS3Call(word word word word word
 		      word word word word word) 
 	     DOS3Call()
+#103 NETBIOSCALL
+#104 GETCODEINFO
+#105 GETEXEVERSION
+#106 SETSWAPAREASIZE
 107 pascal SetErrorMode(word) SetErrorMode(1)
+#108 SWITCHSTACKTO
+#109 SWITCHSTACKBACK
+#110 PATCHCODEHANDLE
 111 pascal GlobalWire(word) GlobalLock(1)
 112 pascal GlobalUnWire(word) GlobalUnlock(1)
+#113 __AHSHIFT
+#114 __AHINCR
 115 pascal OutputDebugString(ptr) OutputDebugString(1)
+#116 INITLIB
+117 pascal OldYield() Yield()
+#118 GETTASKQUEUEDS
+#119 GETTASKQUEUEES
+#120 UNDEFDYNLINK
 121 return LocalShrink 4 0
+#122 ISTASKLOCKED
+#123 KBDRST
+#124 ENABLEKERNEL
+#125 DISABLEKERNEL
+#126 MEMORYFREED
 127 pascal GetPrivateProfileInt(ptr ptr s_word ptr)
 	   GetPrivateProfileInt(1 2 3 4)
 128 pascal GetPrivateProfileString(ptr ptr ptr ptr s_word ptr)
 	   GetPrivateProfileString(1 2 3 4 5 6)
 129 pascal WritePrivateProfileString(ptr ptr ptr ptr)
 	   WritePrivateProfileString(1 2 3 4)
+#130 FILECBR
 131 pascal GetDOSEnvironment() GetDOSEnvironment()
 132 pascal GetWinFlags() GetWinFlags()
-#132 return GetWinFlags 0 0x413
+#133 GETEXEPTR
 134 pascal GetWindowsDirectory(ptr word) GetWindowsDirectory(1 2)
 135 pascal GetSystemDirectory(ptr word) GetSystemDirectory(1 2)
 136 pascal GetDriveType(byte) GetDriveType(1)
 137 pascal FatalAppExit(word ptr) FatalAppExit(1 2)
+#138 GETHEAPSPACES
+#139 DOSIGNAL
+#140 SETSIGHANDLER
+#141 INITTASK1
+150 pascal DirectedYield() Yield()
+#151 WINOLDAPCALL
 152 pascal GetNumTasks() GetNumTasks()
 154 return GlobalNotify 4 0
+#155 GETTASKDS
+#156 LIMITEMSPAGES
+#157 GETCURPID
+#158 ISWINOLDAPTASK
+#159 GLOBALHANDLENORIP
+#160 EMSCOPY
+#161 LOCALCOUNTFREE
+#162 LOCALHEAPSIZE
 163 pascal GlobalLRUOldest(word) ReturnArg(1)
 164 pascal GlobalLRUNewest(word) ReturnArg(1)
+#165 A20PROC
 166 pascal WinExec(ptr word) WinExec(1 2)
+#167 GETEXPWINVER
+#168 DIRECTRESALLOC
 169 pascal GetFreeSpace(word) GetFreeSpace(1)
 170 pascal AllocCStoDSAlias(word) AllocDStoCSAlias(1)
 171 pascal AllocDStoCSAlias(word) AllocDStoCSAlias(1)
+#172 ALLOCALIAS
+#173 __ROMBIOS
+#174 __A000H
 175 pascal AllocSelector(word) AllocSelector(1)
 176 pascal FreeSelector(word) FreeSelector(1)
 177 pascal PrestoChangoSelector(word word) PrestoChangoSelector(1 2)
 178 equate __WINFLAGS 0x413
+#179 __D000H
+#180 LONGPTRADD
+#181 __B000H
+#182 __B800H
+#183 __0000H
 184 return GlobalDOSAlloc 4 0
 185 return GlobalDOSFree 2 0
+#186 GETSELECTORBASE
+#187 SETSELECTORBASE
+#188 GETSELECTORLIMIT
+#189 SETSELECTORLIMIT
+#190 __E000H
 191 pascal GlobalPageLock(word) GlobalLock(1)
 192 pascal GlobalPageUnlock(word) GlobalUnlock(1)
+#193 __0040H
+#194 __F000H
+#195 __C000H
+#196 SELECTORACCESSRIGHTS
 197 pascal GlobalFix(word) GlobalLock(1)
 198 pascal GlobalUnfix(word) GlobalUnlock(1)
-57  pascal GetProfileInt(ptr ptr word) GetProfileInt(1 2 3)
-58  pascal GetProfileString(ptr ptr ptr ptr word) GetProfileString(1 2 3 4 5)
 199 pascal SetHandleCount(word) SetHandleCount(1)
-68  pascal InitAtomTable(word) InitAtomTable(1)
-69  pascal FindAtom(ptr) FindAtom(1)
-70  pascal AddAtom(ptr) AddAtom(1)
-71  pascal DeleteAtom(word) DeleteAtom(1)
-72  pascal GetAtomName(word ptr s_word) GetAtomName(1 2 3)
-73  pascal GetAtomHandle(word) GetAtomHandle(1)
+#200 VALIDATEFREESPACES
+#201 REPLACEINST
+#202 REGISTERPTRACE
+#203 DEBUGBREAK
+#204 SWAPRECORDING
+#205 CVWBREAK
+#206 ALLOCSELECTORARRAY
+#207 ISDBCSLEADBYTE
+#310 LOCALHANDLEDELTA
+#311 GETSETKERNELDOSPROC
+#314 DEBUGDEFINESEGMENT
+315 pascal WriteOutProfiles() sync_profiles()
+#316 GETFREEMEMINFO
+#318 FATALEXITHOOK
+#319 FLUSHCACHEDFILEHANDLE
+#320 ISTASK
+#323 ISROMMODULE
+#324 LOGERROR
+#325 LOGPARAMERROR
+#326 ISROMFILE
+#327 K327
+#328 _DEBUGOUTPUT
+#329 K329
+#332 THHOOK
+#334 ISBADREADPTR
+#335 ISBADWRITEPTR
+#336 ISBADCODEPTR
+#337 ISBADSTRINGPTR
+#338 HASGPHANDLER
+#339 DIAGQUERY
+#340 DIAGOUTPUT
+#341 TOOLHELPHOOK
+#342 __GP
+#343 REGISTERWINOLDAPHOOK
+#344 GETWINOLDAPHOOKS
+#345 ISSHAREDSELECTOR
+#346 ISBADHUGEREADPTR
+#347 ISBADHUGEWRITEPTR
+348 pascal hmemcpy(ptr ptr long) hmemcpy(1 2 3)
+349 pascal _hread(word ptr long) _hread(1 2 3)
+350 pascal _hwrite(word ptr long) _hwrite(1 2 3)
+#351 BUNNY_351
 353 pascal lstrcpyn(ptr ptr word) lstrcpyn(1 2 3)
-
+#354 GETAPPCOMPATFLAGS
+#355 GETWINDEBUGINFO
+#356 SETWINDEBUGINFO
+#403 K403
+#404 K404
diff --git a/if1632/shell.spec b/if1632/shell.spec
index 16d2a9e..062a9f6 100644
--- a/if1632/shell.spec
+++ b/if1632/shell.spec
@@ -2,7 +2,7 @@
 #
 name	shell
 id	6
-length	256
+length	103
 
 #
 # WARNING ! These functions are not documented, so I didn't look for
diff --git a/if1632/user.spec b/if1632/user.spec
index 2b6ea2f..1c4129d 100644
--- a/if1632/user.spec
+++ b/if1632/user.spec
@@ -5,6 +5,9 @@
 length	540
 
 1   pascal MessageBox(word ptr ptr word) MessageBox(1 2 3 4)
+#2 OLDEXITWINDOWS
+#3 ENABLEOEMLAYER
+#4 DISABLEOEMLAYER
 5   pascal InitApp(word) USER_InitApp(1)
 6   pascal PostQuitMessage(word) PostQuitMessage(1)
 7   pascal ExitWindows(long word) ExitWindows(1 2)
@@ -50,6 +53,8 @@
 48  pascal IsChild(word word) IsChild(1 2)
 49  pascal IsWindowVisible(word) IsWindowVisible(1)
 50  pascal FindWindow(ptr ptr) FindWindow(1 2)
+#51 BEAR51
+#52 ANYPOPUP
 53  pascal DestroyWindow(word) DestroyWindow(1)
 54  pascal EnumWindows(ptr long) EnumWindows(1 2)
 55  pascal EnumChildWindows(word ptr long) EnumChildWindows(1 2 3)
@@ -109,8 +114,11 @@
 109 pascal PeekMessage(ptr word word word word) PeekMessage(1 2 3 4 5)
 110 pascal PostMessage(word word word long) PostMessage(1 2 3 4)
 111 pascal SendMessage(word word word long) SendMessage(1 2 3 4)
+#112 WAITMESSAGE
 113 pascal TranslateMessage(ptr) TranslateMessage(1)
 114 pascal DispatchMessage(ptr) DispatchMessage(1)
+#115 REPLYMESSAGE
+#116 POSTAPPMESSAGE
 118 pascal RegisterWindowMessage(ptr) RegisterWindowMessage(1)
 119 pascal GetMessagePos() GetMessagePos()
 120 pascal GetMessageTime() GetMessageTime()
@@ -154,6 +162,8 @@
 158 pascal SetMenu(word word) SetMenu(1 2)
 159 pascal GetSubMenu(word word) GetSubMenu(1 2)
 160 pascal DrawMenuBar(word) DrawMenuBar(1)
+#161 GETMENUSTRING
+#162 HILITEMENUITEM
 163 pascal CreateCaret(word word word word) CreateCaret(1 2 3 4)
 164 pascal DestroyCaret() DestroyCaret()
 165 pascal SetCaretPos(word word) SetCaretPos(1 2)
@@ -161,7 +171,9 @@
 167 pascal ShowCaret(word) ShowCaret(1)
 168 pascal SetCaretBlinkTime(word) SetCaretBlinkTime(1)
 169 pascal GetCaretBlinkTime() GetCaretBlinkTime()
+#170 ARRANGEICONICWINDOWS
 171 pascal WinHelp(word ptr word long) WinHelp(1 2 3 4)
+#172 SWITCHTOTHISWINDOW
 173 pascal LoadCursor(word ptr) LoadCursor(1 2)
 174 pascal LoadIcon(word ptr) LoadIcon(1 2)
 175 pascal LoadBitmap(word ptr) LoadBitmap(1 2)
@@ -173,14 +185,23 @@
 181 pascal SetSysColors(word ptr ptr) SetSysColors(1 2 3)
 182 pascal KillSystemTimer(word word) KillSystemTimer(1 2)
 183 pascal GetCaretPos(ptr) GetCaretPos(1)
+#184 QUERYSENDMESSAGE
 185 pascal GrayString(word word ptr ptr word word word word word)
 	   GrayString(1 2 3 4 5 6 7 8 9)
+186 pascal SwapMouseButton(word) SwapMouseButton(1)
+#187 ENDMENU
 188 pascal SetSysModalWindow(word) SetSysModalWindow(1)
+189 pascal GetSysModalWindow() GetSysModalWindow()
 190 pascal GetUpdateRect(word ptr word) GetUpdateRect(1 2 3)
 191 pascal ChildWindowFromPoint(word long) ChildWindowFromPoint(1 2)
+#192 INSENDMESSAGE
 193 pascal IsClipboardFormatAvailable(word) IsClipboardFormatAvailable(1)
 194  pascal DlgDirSelectComboBox(word ptr word) DlgDirSelectComboBox(1 2 3)
 195 pascal DlgDirListComboBox(word ptr word word word) DlgDirListComboBox(1 2 3 4 5)
+#196 TABBEDTEXTOUT
+#197 GETTABBEDTEXTEXTENT
+#198 CASCADECHILDWINDOWS
+#199 TILECHILDWINDOWS
 200 pascal OpenComm(ptr word word) OpenComm(1 2 3)
 201 pascal SetCommState(ptr) SetCommState(1)
 202 pascal GetCommState(word ptr) GetCommState(1 2)
@@ -197,20 +218,27 @@
 213 pascal BuildCommDCB(ptr ptr) BuildCommDCB(1 2)
 214 pascal EscapeCommFunction(word word) EscapeCommFunction(1 2)
 215 pascal FlushComm(word word) FlushComm(1 2)
+#216 USERSEEUSERDO
+#217 LOOKUPMENUHANDLE
 218 pascal DialogBoxIndirect(word word word ptr) DialogBoxIndirect(1 2 3 4)
 219 pascal CreateDialogIndirect(word ptr word ptr)
 	   CreateDialogIndirect(1 2 3 4)
 220 pascal LoadMenuIndirect(ptr) LoadMenuIndirect(1)
 221 pascal ScrollDC(word s_word s_word ptr ptr word ptr) 
 	   ScrollDC(1 2 3 4 5 6 7)
+#222 GETKEYBOARDSTATE
+#223 SETKEYBOARDSTATE
 224 pascal GetWindowTask(word) GetWindowTask(1)
 225 pascal EnumTaskWindows(word ptr long) EnumTaskWindows(1 2 3)
+#226 LOCKINPUT
 227 pascal GetNextDlgGroupItem(word word word) GetNextDlgGroupItem(1 2 3)
 228 pascal GetNextDlgTabItem(word word word) GetNextDlgTabItem(1 2 3)
 229 pascal GetTopWindow(word) GetTopWindow(1)
 230 pascal GetNextWindow(word word) GetNextWindow(1 2)
+#231 GETSYSTEMDEBUGSTATE
 232 pascal SetWindowPos(word word word word word word word) 
            SetWindowPos(1 2 3 4 5 6 7)
+#233 SETPARENT
 234 pascal UnhookWindowsHook(s_word ptr) UnhookWindowsHook(1 2)
 235 pascal DefHookProc(s_word word long ptr) DefHookProc(1 2 3 4)
 236 pascal GetCapture() GetCapture()
@@ -225,9 +253,27 @@
 	   CreateDialogIndirectParam(1 2 3 4 5)
 243 pascal GetDialogBaseUnits() GetDialogBaseUnits()
 244 pascal EqualRect(ptr ptr) EqualRect(1 2)
+#245 ENABLECOMMNOTIFICATION
+#246 EXITWINDOWSEXEC
+247 pascal GetCursor() GetCursor()
 248 pascal GetOpenClipboardWindow() GetOpenClipboardWindow()
+#249 GETASYNCKEYSTATE
+#250 GETMENUSTATE
+#251 SENDDRIVERMESSAGE
+#252 OPENDRIVER
+#253 CLOSEDRIVER
+#254 GETDRIVERMODULEHANDLE
+#255 DEFDRIVERPROC
+#256 GETDRIVERINFO
+#257 GETNEXTDRIVER
 258 pascal MapWindowPoints(word word ptr word) MapWindowPoints(1 2 3 4)
+#259 BEGINDEFERWINDOWPOS
+#260 DEFERWINDOWPOS
+#261 ENDDEFERWINDOWPOS
 262 pascal GetWindow(word word) GetWindow(1 2)
+#263 GETMENUITEMCOUNT
+#264 GETMENUITEMID
+#265 SHOWOWNEDPOPUPS
 266 pascal SetMessageQueue(word) SetMessageQueue(1)
 267 pascal ShowScrollBar(word word word) ShowScrollBar(1 2 3)
 268 pascal GlobalAddAtom(ptr) GlobalAddAtom(1)
@@ -235,27 +281,62 @@
 270 pascal GlobalFindAtom(ptr) GlobalFindAtom(1)
 271 pascal GlobalGetAtomName(word ptr s_word) GlobalGetAtomName(1 2 3)
 272 pascal IsZoomed(word) IsZoomed(1)
+#273 CONTROLPANELINFO
+#274 GETNEXTQUEUEWINDOW
+#275 REPAINTSCREEN
+#276 LOCKMYTASK
 277 pascal GetDlgCtrlID(word) GetDlgCtrlID(1)
+278 pascal GetDeskTopHwnd() GetDesktopWindow()
+#279 OLDSETDESKPATTERN
+#280 SETSYSTEMMENU
 282 pascal SelectPalette(word word word) SelectPalette(1 2 3)
 283 pascal RealizePalette(word) RealizePalette(1)
 284 pascal GetFreeSystemResources(word) GetFreeSystemResources(1)
+#285 BEAR285
 286 pascal GetDesktopWindow() GetDesktopWindow()
+#287 GETLASTACTIVEPOPUP
 288 pascal GetMessageExtraInfo() GetMessageExtraInfo()
+#289 KEYB_EVENT
 290 pascal RedrawWindow(word ptr word word) RedrawWindow(1 2 3 4)
 291 pascal SetWindowsHookEx(s_word ptr word word) SetWindowsHookEx(1 2 3 4)
 292 pascal UnhookWindowsHookEx(ptr) UnhookWindowsHookEx(1)
 293 pascal CallNextHookEx(ptr s_word word long) CallNextHookEx(1 2 3 4)
+#294 LOCKWINDOWUPDATE
+#299 MOUSE_EVENT
+#301 BOZOSLIVEHERE :-))
+#306 BEAR306
 308 pascal DefDlgProc(word word word long) DefDlgProc(1 2 3 4)
+#314 SIGNALPROC
 319 pascal ScrollWindowEx(word s_word s_word ptr ptr word ptr word) 
 	   ScrollWindowEx(1 2 3 4 5 6 7 8)
+#320 SYSERRORBOX
+#321 SETEVENTHOOK
+#322 WINOLDAPPHACKOMATIC
+#323 GETMESSAGE2
 324 pascal FillWindow(word word word word) FillWindow(1 2 3 4)
 325 pascal PaintRect(word word word word ptr) PaintRect(1 2 3 4 5)
+#326 GETCONTROLBRUSH
+#331 ENABLEHARDWAREINPUT
+332 pascal UserYield() Yield()
+#333 ISUSERIDLE
 334 pascal GetQueueStatus(word) GetQueueStatus(1)
 335 pascal GetInputState() GetInputState()
+#336 LOADCURSORICONHANDLER
+#337 GETMOUSEEVENTPROC
+#341 _FFFE_FARFRAME
+#343 GETFILEPORTNAME
+#356 LOADDIBCURSORHANDLER
+#357 LOADDIBICONHANDLER
+#358 ISMENU
 359 pascal GetDCEx(word word long) GetDCEx(1 2 3)
+#362 DCHOOK
+#368 COPYICON
+#369 COPYCURSOR
 370 pascal GetWindowPlacement(word ptr) GetWindowPlacement(1 2)
 371 pascal SetWindowPlacement(word ptr) SetWindowPlacement(1 2)
+#372 GETINTERNALICONHEADER
 373 pascal SubtractRect(ptr ptr ptr) SubtractRect(1 2 3)
+#400 FINALUSERINIT
 402 pascal GetPriorityClipboardFormat(word ptr s_word) 
 	GetPriorityClipboardFormat(1 2 3)
 403 pascal UnregisterClass(ptr word) UnregisterClass(1 2)
@@ -264,6 +345,7 @@
 	CreateCursor(1 2 3 4 5 6 7)
 407 pascal CreateIcon(word word word byte byte ptr ptr)
            CreateIcon(1 2 3 4 5 6 7)
+#408 CREATECURSORICONINDIRECT
 410 pascal InsertMenu(word word word word ptr) InsertMenu(1 2 3 4 5)
 411 pascal AppendMenu(word word word ptr) AppendMenu(1 2 3 4)
 412 pascal RemoveMenu(word word word) RemoveMenu(1 2 3)
@@ -277,6 +359,8 @@
 	   SetMenuItemBitmaps(1 2 3 4 5)
 420 pascal wsprintf(ptr ptr) wsprintf(1 2)
 421 pascal wvsprintf(ptr ptr ptr) wvsprintf(1 2 3)
+#422 DLGDIRSELECTEX
+#423 DLGDIRSELECTCOMBOBOXEX
 430 pascal lstrcmp(ptr ptr) lstrcmp(1 2)
 431 pascal AnsiUpper(ptr) AnsiUpper(1)
 432 pascal AnsiLower(ptr) AnsiLower(1)
@@ -293,12 +377,57 @@
 	                  word word word ptr) 
 	   CreateWindowEx(1 2 3 4 5 6 7 8 9 10 11 12)
 454 pascal AdjustWindowRectEx(ptr long word long) AdjustWindowRectEx(1 2 3 4)
+#455 GETICONID
+#456 LOADICONHANDLER
 457 pascal DestroyIcon(word) DestroyIcon(1)
 458 pascal DestroyCursor(word) DestroyCursor(1)
+#459 DUMPICON
 460 pascal GetInternalWindowPos(word ptr ptr) GetInternalWindowPos(1 2 3)
 461 pascal SetInternalWindowPos(word word ptr ptr) SetInternalWindowPos(1 2 3 4)
+#462 CALCCHILDSCROLL
+#463 SCROLLCHILDREN
+#464 DRAGOBJECT
+#465 DRAGDETECT
 466 pascal DrawFocusRect(word ptr) DrawFocusRect(1 2)
+#470 STRINGFUNC
 471 pascal lstrcmpi(ptr ptr) lstrcmpi(1 2)
 472 pascal AnsiNext(ptr) AnsiNext(1 )
 473 pascal AnsiPrev(ptr ptr) AnsiPrev(1 2)
+#480 GETUSERLOCALOBJTYPE
+#481 HARDWARE_EVENT
+#482 ENABLESCROLLBAR
 483 pascal SystemParametersInfo(word word ptr word) SystemParametersInfo(1 2 3 4)
+#484 __GP
+#499 WNETERRORTEXT
+#501 WNETOPENJOB
+#502 WNETCLOSEJOB
+#503 WNETABORTJOB
+#504 WNETHOLDJOB
+#505 WNETRELEASEJOB
+#506 WNETCANCELJOB
+#507 WNETSETJOBCOPIES
+#508 WNETWATCHQUEUE
+#509 WNETUNWATCHQUEUE
+#510 WNETLOCKQUEUEDATA
+#511 WNETUNLOCKQUEUEDATA
+#512 WNETGETCONNECTION
+#513 WNETGETCAPS
+#514 WNETDEVICEMODE
+#515 WNETBROWSEDIALOG
+#516 WNETGETUSER
+#517 WNETADDCONNECTION
+#518 WNETCANCELCONNECTION
+#519 WNETGETERROR
+#520 WNETGETERRORTEXT
+#521 WNETENABLE
+#522 WNETDISABLE
+#523 WNETRESTORECONNECTION
+#524 WNETWRITEJOB
+#525 WNETCONNECTDIALOG
+#526 WNETDISCONNECTDIALOG
+#527 WNETCONNECTIONDIALOG
+#528 WNETVIEWQUEUEDIALOG
+#529 WNETPROPERTYDIALOG
+#530 WNETGETDIRECTORYTYPE
+#531 WNETDIRECTORYNOTIFY
+#532 WNETGETPROPERTYTEXT
diff --git a/include/winsock.h b/include/winsock.h
index 3429f4a..2a2674b 100644
--- a/include/winsock.h
+++ b/include/winsock.h
@@ -80,8 +80,9 @@
  */
 #define SOMAXCONN       5
 
+#ifndef MSG_DONTROUTE
 #define MSG_DONTROUTE   0x4             /* send without using routing tables */
-
+#endif
 #define MSG_MAXIOVLEN   16
 
 /*
diff --git a/loader/signal.c b/loader/signal.c
index d788cc0..f00a348 100644
--- a/loader/signal.c
+++ b/loader/signal.c
@@ -18,6 +18,7 @@
 #include "wine.h"
 #include "segmem.h"
 #include "prototypes.h"
+#include "win.h"
  
 char * cstack[4096];
 struct sigaction segv_act;
@@ -162,6 +163,9 @@
     return;
 
   oops:
+    XUngrabPointer(display, CurrentTime);
+	XUngrabServer(display);
+	XFlush(display);
     fprintf(stderr,"In win_fault %x:%x\n", scp->sc_cs, scp->sc_eip);
 #ifdef linux
     wine_debug(scp);  /* Enter our debugger */
diff --git a/loader/wine.c b/loader/wine.c
index 8236853..fc26d71 100644
--- a/loader/wine.c
+++ b/loader/wine.c
@@ -306,7 +306,7 @@
 
 	hSysRes = LoadImage(filename, DLL);
 	if (hSysRes == (HINSTANCE)NULL)
-		fprintf(stderr, "wine: can't find %s!.\n", filename);
+		fprintf(stderr, "wine: can't find %s!\n", filename);
  	else
  	    printf("System Resources Loaded // hSysRes='%04X'\n", hSysRes);
 	
diff --git a/misc/cursor.c b/misc/cursor.c
index fa2d0ec..874ff92 100644
--- a/misc/cursor.c
+++ b/misc/cursor.c
@@ -359,6 +359,13 @@
     return hOldCursor;
 }
 
+/**********************************************************************
+ *			GetCursor [USER.247]
+ */
+HCURSOR GetCursor(void)
+{
+	return hActiveCursor;
+}
 
 /**********************************************************************
  *                        SetCursorPos [USER.70]
diff --git a/misc/main.c b/misc/main.c
index 59106ca..6efa211 100644
--- a/misc/main.c
+++ b/misc/main.c
@@ -317,7 +317,7 @@
     DOS_InitFS();
     Comm_Init();
     
-#ifndef sun
+#ifndef sunos
     atexit(called_at_exit);
 #endif
 
@@ -504,3 +504,20 @@
 {
 	memcpy(lpDest, lpSource, nBytes);
 }
+
+/***********************************************************************
+*	YIELD (KERNEL.29)
+*/
+void Yield(void)
+{
+	;
+}
+
+/***********************************************************************
+*	SWAPMOUSEBUTTON (USER.186)
+*/
+BOOL SwapMouseButton(BOOL fSwap)
+{
+	return 0;	/* don't swap */
+}
+
diff --git a/misc/profile.c b/misc/profile.c
index 84cf8f5..3fac219 100644
--- a/misc/profile.c
+++ b/misc/profile.c
@@ -9,6 +9,11 @@
  *            of the KeyNames (as documented in the MS-SDK).
  *
  *       o if KeyValue == NULL now clears the value in Get*ProfileString
+ *
+ * 20/Apr  SL - I'm not sure where these definitions came from, but my SDK
+ *         has a NULL KeyValue returning a list of KeyNames, and a NULL
+ *         AppName undefined.  I changed GetSetProfile to match.  This makes
+ *         PROGMAN.EXE do the right thing.
  */
 
 static char Copyright [] = "Copyright (C) 1993 Miguel de Icaza";
@@ -78,7 +83,7 @@
 	strcat(temp, "\\");
 	strcat(temp, name);
 	
-	return GetUnixFileName(name);
+	return GetUnixFileName(temp);
 }
 
 static TSecHeader *load (char *filename)
@@ -230,7 +235,7 @@
 	    continue;
 
 	/* If no key value given, then list all the keys */
-	if ((!AppName) && (!set)){
+	if ((!KeyName) && (!set)){
 	    char *p = ReturnedString;
 	    int left = Size - 1;
 	    int slen;
diff --git a/misc/winsocket.c b/misc/winsocket.c
index ea56ca8..cc361f6 100644
--- a/misc/winsocket.c
+++ b/misc/winsocket.c
@@ -7,7 +7,9 @@
  
 #include <stdio.h>
 #include <string.h>
+#include <signal.h>
 #include <sys/types.h>
+#include <sys/ipc.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
@@ -22,12 +24,20 @@
 
 static WORD wsa_errno;
 static int wsa_initted;
+static key_t wine_key = 0;
+static FARPROC BlockFunction;
+static fd_set fd_in_use;
 
-#define dump_sockaddr(a) \
-	fprintf(stderr, "sockaddr_in: family %d, address %s, port %d\n", \
-			((struct sockaddr_in *)a)->sin_family, \
-			inet_ntoa(((struct sockaddr_in *)a)->sin_addr), \
-			ntohs(((struct sockaddr_in *)a)->sin_port))
+struct ipc_packet {
+	long	mtype;
+	HANDLE	handle;
+	HWND	hWnd;
+	WORD	wMsg;
+	LONG	lParam;
+};
+#define IPC_PACKET_SIZE (sizeof(struct ipc_packet) - sizeof(long))
+
+#define MTYPE 0xb0b0eb05
 
 struct WinSockHeap {
 	char	ntoa_buffer[32];
@@ -46,9 +56,14 @@
 	struct	servent WSAservent_name;
 	struct	servent WSAservent_port;
 };
-
 static struct WinSockHeap *heap;
 
+#define dump_sockaddr(a) \
+	fprintf(stderr, "sockaddr_in: family %d, address %s, port %d\n", \
+			((struct sockaddr_in *)a)->sin_family, \
+			inet_ntoa(((struct sockaddr_in *)a)->sin_addr), \
+			ntohs(((struct sockaddr_in *)a)->sin_port))
+
 static WORD wsaerrno(void)
 {
 #ifdef DEBUG_WINSOCK
@@ -112,7 +127,7 @@
 	case EREMOTE:		return WSAEREMOTE;
 
         default:
-		fprintf(stderr, "winsock: unknown error!\n");
+		fprintf(stderr, "winsock: unknown errorno %d!\n", errno);
 		return WSAEOPNOTSUPP;
 	}
 }
@@ -157,6 +172,8 @@
 	fprintf(stderr, "WSA_closesocket: socket %d\n", s);
 #endif
 
+	FD_CLR(s, &fd_in_use);
+
 	if (close(s) < 0) {
         	errno_to_wsaerrno();
         	return SOCKET_ERROR;
@@ -399,11 +416,14 @@
 #endif
             return INVALID_SOCKET;
     }
+    
     if (sock > 0xffff) {
 	wsa_errno = WSAEMFILE;
 	return INVALID_SOCKET;
     }
 
+    FD_SET(sock, &fd_in_use);
+
 #ifdef DEBUG_WINSOCK
     fprintf(stderr, "WSA_socket: fd %d\n", sock);
 #endif
@@ -526,114 +546,224 @@
 	return (struct servent *) &heap->servent_port;
 }
 
-/******************** winsock specific functions ************************/
+/******************** winsock specific functions ************************
+ *
+ */
+
+#define AllocWSAHandle() getpid()
+
+static void recv_message(int sig)
+{
+	struct ipc_packet message;
+
+	if (msgrcv(wine_key, &message, IPC_PACKET_SIZE, MTYPE, IPC_NOWAIT) == -1)
+		perror("wine: msgrcv");
+
+	fprintf(stderr, 
+		"WSA: PostMessage (hwnd %d, wMsg %d, wParam %d, lParam %d)\n",
+		message.hWnd,
+		message.wMsg,
+		message.handle,
+		message.lParam);
+
+	PostMessage(message.hWnd, message.wMsg, message.handle, message.lParam);
+		
+	signal(SIGUSR1, recv_message);
+}
+
+
+static void send_message(HANDLE handle, HWND hWnd, u_int wMsg, long lParam)
+{
+	struct ipc_packet message;
+	
+	message.mtype = MTYPE;
+	message.handle = handle;
+	message.hWnd = hWnd;
+	message.wMsg = wMsg;
+	message.lParam = lParam;
+
+	fprintf(stderr, 
+		"WSA: send (hwnd %d, wMsg %d, handle %d, lParam %d)\n",
+		hWnd, wMsg, handle, lParam);
+	
+	if (msgsnd(wine_key, &message,  IPC_PACKET_SIZE, IPC_NOWAIT) == -1)
+		perror("wine: msgsnd");
+		
+	kill(getppid(), SIGUSR1);
+}
+
 
 HANDLE WSAAsyncGetHostByAddr(HWND hWnd, u_int wMsg, const char FAR *addr,
 		 INT len, INT type, char FAR *buf, INT buflen)
 {
+	HANDLE handle;
 	struct hostent *host;
 
-	if ((host = gethostbyaddr(addr, len, type)) == NULL) {
-		PostMessage(hWnd, wMsg, 1, wsaerrno() << 8);
+	handle = AllocWSAHandle();
 
-		return 1;
+	if (fork()) {
+		return handle;
+	} else {
+		if ((host = gethostbyaddr(addr, len, type)) == NULL) {
+			send_message(hWnd, wMsg, handle, wsaerrno() << 16);
+			exit(0);
+		}
+		memcpy(buf, host, buflen);
+		send_message(hWnd, wMsg, handle, 0);
+		exit(0);
 	}
+}
 
-	memcpy(buf, host, buflen);
-	PostMessage(hWnd, wMsg, 1, 0);
-
-	return 1;
-}                    
 
 HANDLE WSAAsyncGetHostByName(HWND hWnd, u_int wMsg, const char FAR *name, 
 			char FAR *buf, INT buflen)
 {
+	HANDLE handle;
 	struct hostent *host;
 
-	if ((host = gethostbyname(name)) == NULL) {
-		PostMessage(hWnd, wMsg, 2, wsaerrno() << 8);
-		return 2;
+	handle = AllocWSAHandle();
+
+	if (fork()) {
+		return handle;
+	} else {
+		if ((host = gethostbyname(name)) == NULL) {
+			send_message(hWnd, wMsg, handle, wsaerrno() << 16);
+			exit(0);
+		}
+		memcpy(buf, host, buflen);
+		send_message(hWnd, wMsg, handle, 0);
+		exit(0);
 	}
-
-	memcpy(buf, host, buflen);
-	PostMessage(hWnd, wMsg, 2, 0);
-
-	return 2;
 }                     
 
+
 HANDLE WSAAsyncGetProtoByName(HWND hWnd, u_int wMsg, const char FAR *name, 
 			char FAR *buf, INT buflen)
 {
+	HANDLE handle;
 	struct protoent *proto;
 
-	if ((proto = getprotobyname(name)) == NULL) {
-		PostMessage(hWnd, wMsg, 3, wsaerrno() << 8);
-		return 3;
+	handle = AllocWSAHandle();
+
+	if (fork()) {
+		return handle;
+	} else {
+		if ((proto = getprotobyname(name)) == NULL) {
+			send_message(hWnd, wMsg, handle, wsaerrno() << 16);
+			exit(0);
+		}
+		memcpy(buf, proto, buflen);
+		send_message(hWnd, wMsg, handle, 0);
+		exit(0);
 	}
-
-	memcpy(buf, proto, buflen);
-	PostMessage(hWnd, wMsg, 3, 0);
-
-	return 3;
 }
 
+
 HANDLE WSAAsyncGetProtoByNumber(HWND hWnd, u_int wMsg, INT number, 
 			char FAR *buf, INT buflen)
 {
+	HANDLE handle;
 	struct protoent *proto;
 
-	if ((proto = getprotobynumber(number)) == NULL) {
-		PostMessage(hWnd, wMsg, 4, wsaerrno() << 8);
-		return 4;
+	handle = AllocWSAHandle();
+
+	if (fork()) {
+		return handle;
+	} else {
+		if ((proto = getprotobynumber(number)) == NULL) {
+			send_message(hWnd, wMsg, handle, wsaerrno() << 16);
+			exit(0);
+		}
+		memcpy(buf, proto, buflen);
+		send_message(hWnd, wMsg, handle, 0);
+		exit(0);
 	}
-
-	memcpy(buf, proto, buflen);
-	PostMessage(hWnd, wMsg, 4, 0);
-
-	return 4;
 }
 
+
 HANDLE WSAAsyncGetServByName(HWND hWnd, u_int wMsg, const char FAR *name, 
 			const char FAR *proto, char FAR *buf, INT buflen)
 {
+	HANDLE handle;
 	struct servent *service;
 
-	if ((service = getservbyname(name, proto)) == NULL) {
-		PostMessage(hWnd, wMsg, 5, wsaerrno() << 8);
-        
-        	return 5;
+	handle = AllocWSAHandle();
+
+	if (fork()) {
+		return handle;
+	} else {
+		if ((service = getservbyname(name, proto)) == NULL) {
+			send_message(hWnd, wMsg, handle, wsaerrno() << 16);
+			exit(0);
+		}
+		memcpy(buf, service, buflen);
+		send_message(hWnd, wMsg, handle, 0);
+		exit(0);
 	}
-	memcpy(buf, service, buflen);
-	PostMessage(hWnd, wMsg, 5, 0);
-	
-	return 5;
 }
 
+
 HANDLE WSAAsyncGetServByPort(HWND hWnd, u_int wMsg, INT port, const char FAR 
 			*proto, char FAR *buf, INT buflen)
 {
+	HANDLE handle;
 	struct servent *service;
 
-	if ((service = getservbyport(port, proto)) == NULL) {
-		PostMessage(hWnd, wMsg, 6, wsaerrno() << 8);
-        
-        	return 6;
+	handle = AllocWSAHandle();
+
+	if (fork()) {
+		return handle;
+	} else {
+		if ((service = getservbyport(port, proto)) == NULL) {
+			send_message(hWnd, wMsg, handle, wsaerrno() << 16);
+			exit(0);
+		}
+		memcpy(buf, service, buflen);
+		send_message(hWnd, wMsg, handle, 0);
+		exit(0);
 	}
-	memcpy(buf, service, buflen);
-	PostMessage(hWnd, wMsg, 6, 0);
-	
-	return 6;
 }
 
 INT WSAAsyncSelect(SOCKET s, HWND hWnd, u_int wMsg, long lEvent)
 {
+	long event;
+	fd_set read_fds, write_fds, except_fds;
+
 #ifdef DEBUG_WINSOCK
 	fprintf(stderr, "WSA_AsyncSelect: socket %d, HWND %d, wMsg %d, event %d\n", s, hWnd, wMsg, lEvent);
 #endif
-	fcntl(s, F_SETFL, O_NONBLOCK);
 
+	/* remove outstanding asyncselect() processes */
+	/* kill */
 
-	return 0;
+	if (wMsg == 0 && lEvent == 0) 
+		return 0;
+
+	if (fork()) {
+		return 0;
+	} else {
+		while (1) {
+			FD_ZERO(&read_fds);
+			FD_ZERO(&write_fds);
+			FD_ZERO(&except_fds);
+
+			if (lEvent & FD_READ)
+				FD_SET(s, &read_fds);
+			if (lEvent & FD_WRITE)
+				FD_SET(s, &write_fds);
+
+			fcntl(s, F_SETFL, O_NONBLOCK);
+			select(s + 1, &read_fds, &write_fds, &except_fds, NULL);
+
+			event = 0;
+			if (FD_ISSET(s, &read_fds))
+				event |= FD_READ;
+			if (FD_ISSET(s, &write_fds))
+				event |= FD_WRITE;
+
+			send_message(hWnd, wMsg, s, (wsaerrno() << 16) | event);
+		}
+	}
 }
 
 INT WSAFDIsSet(INT fd, fd_set *set)
@@ -646,6 +776,7 @@
 #ifdef DEBUG_WINSOCK
 	fprintf(stderr, "WSA_AsyncRequest: handle %d\n", hAsyncTaskHandle);
 #endif
+
 	return 0;
 }
 
@@ -685,8 +816,11 @@
 FARPROC WSASetBlockingHook(FARPROC lpBlockFunc)
 {
 #ifdef DEBUG_WINSOCK
-	fprintf(stderr, "WSA_SetBlockHook\n %8x", lpBlockFunc);
+	fprintf(stderr, "WSA_SetBlockHook %8x, STUB!\n", lpBlockFunc);
 #endif
+	BlockFunction = lpBlockFunc;
+
+	return lpBlockFunc;
 }
 
 INT WSAUnhookBlockingHook(void)
@@ -694,6 +828,9 @@
 #ifdef DEBUG_WINSOCK
 	fprintf(stderr, "WSA_UnhookBlockingHook\n");
 #endif
+	BlockFunction = NULL;
+
+	return 0;
 }
 
 WSADATA Winsock_data = {
@@ -716,8 +853,8 @@
 
 INT WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData)
 {
-	int HeapHandle;
-	MDESC *MyHeap;
+    int HeapHandle;
+    MDESC *MyHeap;
 
 #ifdef DEBUG_WINSOCK
     fprintf(stderr, "WSAStartup: verReq=%x\n", wVersionRequested);
@@ -731,21 +868,42 @@
     if (!lpWSAData)
         return WSAEINVAL;
 
+	/* alloc winsock heap */
+
     if ((HeapHandle = GlobalAlloc(GMEM_FIXED,sizeof(struct WinSockHeap))) == 0)
 	return WSASYSNOTREADY;
 
     heap = (struct WinSockHeap *) GlobalLock(HeapHandle);
     HEAP_Init(&MyHeap, heap, sizeof(struct WinSockHeap));
-    
     bcopy(&Winsock_data, lpWSAData, sizeof(Winsock_data));
 
-    wsa_initted = 1;
+    /* ipc stuff */
+
+    if ((wine_key = msgget(IPC_PRIVATE, 0600)) == -1)
+	perror("wine: msgget");
+
+    signal(SIGUSR1, recv_message);
+
+    /* clear */
     
+    FD_ZERO(&fd_in_use);
+
+    wsa_initted = 1;
     return(0);
 }
 
 INT WSACleanup(void)
 {
-    wsa_initted = 0;
-    return 0;
+	int fd;
+
+	if (wine_key)
+		if (msgctl(wine_key, IPC_RMID, NULL) == -1)
+			perror("wine: shmctl");
+
+	for (fd = 0; fd != FD_SETSIZE; fd++)
+		if (FD_ISSET(fd, &fd_in_use))
+			close(fd);
+
+	wsa_initted = 0;
+	return 0;
 }
diff --git a/objects/bitblt.c b/objects/bitblt.c
index 992f7ca..24f05e0 100644
--- a/objects/bitblt.c
+++ b/objects/bitblt.c
@@ -226,6 +226,29 @@
     } /* for all x in dest */
 }
 
+/* We use the 32-bit to 64-bit multiply and 64-bit to 32-bit divide of the */
+/* 386 (which gcc doesn't know well enough) to efficiently perform integer */
+/* scaling without having to worry about overflows. */
+
+/* ##### muldiv64() borrowed from svgalib 1.03 ##### */
+static inline int muldiv64( int m1, int m2, int d ) 
+{
+	/* int32 * int32 -> int64 / int32 -> int32 */
+#ifdef i386	
+	int result;
+	__asm__(
+		"imull %%edx\n\t"
+		"idivl %3\n\t"
+		: "=a" (result)			/* out */
+		: "a" (m1), "d" (m2), "g" (d)	/* in */
+		: "ax", "dx"			/* mod */
+	);
+	return result;
+#else
+	return m1 * m2 / d;
+#endif
+}
+
 /***********************************************************************
  *          color stretch -- deletes unused pixels
  * 
@@ -233,16 +256,40 @@
 static void color_stretch(XImage *sxi, XImage *dxi, 
 	short widthSrc, short heightSrc, short widthDest, short heightDest)
 {
-    float deltax, deltay, sourcex, sourcey;
-    register int x, y;
+	register int x, y, sx, sy, xfactor, yfactor;
 
-    deltax = (float)widthSrc/widthDest;
-    deltay = (float)heightSrc/heightDest;
+	xfactor = muldiv64(widthSrc, 65536, widthDest);
+	yfactor = muldiv64(heightSrc, 65536, heightDest);
 
-    for (x=0, sourcex=0.0; x<widthDest; x++, sourcex+=deltax)
-        for (y=0, sourcey=0.0; y<heightDest; y++, sourcey+=deltay)
-            XPutPixel(dxi, x, y, XGetPixel(sxi, (int)sourcex, (int)sourcey));
+	sy = 0;
 
+	for (y = 0; y < heightDest;) 
+	{
+		int sourcey = sy >> 16;
+		sx = 0;
+		for (x = 0; x < widthDest; x++) {
+            		XPutPixel(dxi, x, y, XGetPixel(sxi, sx >> 16, sourcey));
+			sx += xfactor;
+		}
+		y++;
+		while (y < heightDest) {
+			int py;
+
+			sourcey = sy >> 16;
+			sy += yfactor;
+
+			if ((sy >> 16) != sourcey)
+				break;
+
+			/* vertical stretch => copy previous line */
+			
+			py = y - 1;
+
+			for (x = 0; x < widthDest; x++)
+	            		XPutPixel(dxi, x, y, XGetPixel(dxi, x, py));
+        	    	y++;
+		}
+	}
 }
 
 /***********************************************************************
@@ -266,7 +313,7 @@
     WORD stretchmode;
 
 #ifdef DEBUG_GDI     
-    printf( "StretchBlt: %d %d,%d %dx%d %d %d,%d %dx%d %08x\n",
+    fprintf(stderr, "StretchBlt: %d %d,%d %dx%d %d %d,%d %dx%d %08x\n",
            hdcDest, xDest, yDest, widthDest, heightDest, hdcSrc, xSrc, 
            ySrc, widthSrc, heightSrc, rop );
     printf("StretchMode is %x\n", 
@@ -328,13 +375,17 @@
 
     switch (stretchmode) {
 	case BLACKONWHITE:
-		bonw_stretch(sxi, dxi, widthSrc, heightSrc,
+		color_stretch(sxi, dxi, widthSrc, heightSrc, 
 				widthDest, heightDest);
-		break;
+/*		bonw_stretch(sxi, dxi, widthSrc, heightSrc,
+				widthDest, heightDest);
+*/		break;
 	case WHITEONBLACK:
-		wonb_stretch(sxi, dxi, widthSrc, heightSrc, 
+		color_stretch(sxi, dxi, widthSrc, heightSrc, 
 				widthDest, heightDest);
-		break;
+/*		wonb_stretch(sxi, dxi, widthSrc, heightSrc, 
+				widthDest, heightDest);
+*/		break;
 	case COLORONCOLOR:
 		color_stretch(sxi, dxi, widthSrc, heightSrc, 
 				widthDest, heightDest);
diff --git a/windows/win.c b/windows/win.c
index 6889fe6..799cf7e 100644
--- a/windows/win.c
+++ b/windows/win.c
@@ -551,8 +551,9 @@
  
 /**********************************************************************
  *           GetDesktopWindow        (USER.286)
+ *	     GetDeskTopHwnd          (USER.278)
  */
-HWND GetDesktopWindow()
+HWND GetDesktopWindow(void)
 {
     return hwndDesktop;
 }
@@ -960,10 +961,16 @@
  */
 HWND SetSysModalWindow(HWND hWnd)
 {
-	HWND 	hWndOldModal = hWndSysModal;
+	HWND hWndOldModal = hWndSysModal;
 	hWndSysModal = hWnd;
 	printf("EMPTY STUB !! SetSysModalWindow(%04X) !\n", hWnd);
 	return hWndOldModal;
 }
 
-
+/*******************************************************************
+ *			GetSysModalWindow		[USER.189]
+ */
+HWND GetSysModalWindow(void)
+{
+	return hWndSysModal;
+}
diff --git a/wine.ini b/wine.ini
index b1d797f..b791ef8 100644
--- a/wine.ini
+++ b/wine.ini
@@ -11,7 +11,6 @@
 System=c:\windows\system
 Temp=c:\temp
 Path=c:\windows;c:\windows\system;e:\;e:\test;f:\
-SystemResources=sysres.dll
 
 [serialports]
 Com1=/dev/cua0
