Improved syslevel handling, store currently held syslevels in thread
database, WIN_CritSection converted to syslevel.

diff --git a/include/syslevel.h b/include/syslevel.h
index e0fa1d7..faeb3ec 100644
--- a/include/syslevel.h
+++ b/include/syslevel.h
@@ -10,6 +10,12 @@
 #include "windef.h"
 #include "winbase.h"
 
+typedef struct tagSYSLEVEL
+{
+    CRITICAL_SECTION crst;
+    INT level;
+} SYSLEVEL;
+
 extern WORD SYSLEVEL_Win16CurrentTeb;
 extern WORD SYSLEVEL_EmergencyTeb;
 
@@ -18,14 +24,17 @@
 VOID WINAPI SYSLEVEL_LeaveWin16Lock(VOID);
 VOID SYSLEVEL_ReleaseWin16Lock(VOID);
 VOID SYSLEVEL_RestoreWin16Lock(VOID);
+VOID SYSLEVEL_CheckNotLevel( INT level );
 
-VOID WINAPI GetpWin16Lock(CRITICAL_SECTION **lock);
+VOID WINAPI GetpWin16Lock(SYSLEVEL **lock);
 SEGPTR WINAPI GetpWin16Lock16(void);
-
-VOID WINAPI _EnterSysLevel(CRITICAL_SECTION *lock);
-VOID WINAPI _LeaveSysLevel(CRITICAL_SECTION *lock);
 DWORD WINAPI _ConfirmWin16Lock(void);
 
+VOID WINAPI _CreateSysLevel(SYSLEVEL *lock, INT level);
+VOID WINAPI _EnterSysLevel(SYSLEVEL *lock);
+VOID WINAPI _LeaveSysLevel(SYSLEVEL *lock);
+DWORD WINAPI _ConfirmSysLevel(SYSLEVEL *lock);
+
 VOID WINAPI ReleaseThunkLock(DWORD *mutex_count);
 VOID WINAPI RestoreThunkLock(DWORD mutex_count);