4 * Copyright 1993 Robert J. Amstadt
22 WORD USER_HeapSel = 0;
24 extern void TIMER_NukeTimers(HWND, HQUEUE );
25 extern HTASK TASK_GetNextTask(HTASK);
27 /***********************************************************************
28 * GetFreeSystemResources (USER.284)
30 WORD GetFreeSystemResources( WORD resType )
32 int userPercent, gdiPercent;
36 case GFSR_USERRESOURCES:
37 userPercent = (int)LOCAL_CountFree( USER_HeapSel ) * 100 /
38 LOCAL_HeapSize( USER_HeapSel );
42 case GFSR_GDIRESOURCES:
43 gdiPercent = (int)LOCAL_CountFree( GDI_HeapSel ) * 100 /
44 LOCAL_HeapSize( GDI_HeapSel );
48 case GFSR_SYSTEMRESOURCES:
49 userPercent = (int)LOCAL_CountFree( USER_HeapSel ) * 100 /
50 LOCAL_HeapSize( USER_HeapSel );
51 gdiPercent = (int)LOCAL_CountFree( GDI_HeapSel ) * 100 /
52 LOCAL_HeapSize( GDI_HeapSel );
58 return (WORD)MIN( userPercent, gdiPercent );
62 /***********************************************************************
63 * SystemHeapInfo (TOOLHELP.71)
65 BOOL SystemHeapInfo( SYSHEAPINFO *pHeapInfo )
67 pHeapInfo->wUserFreePercent = GetFreeSystemResources( GFSR_USERRESOURCES );
68 pHeapInfo->wGDIFreePercent = GetFreeSystemResources( GFSR_GDIRESOURCES );
69 pHeapInfo->hUserSegment = USER_HeapSel;
70 pHeapInfo->hGDISegment = GDI_HeapSel;
76 /***********************************************************************
77 * TimerCount (TOOLHELP.80)
79 BOOL TimerCount( TIMERINFO *pTimerInfo )
82 * In standard mode, dwmsSinceStart = dwmsThisVM
84 * I tested this, under Windows in enhanced mode, and
85 * if you never switch VM (ie start/stop DOS) these
86 * values should be the same as well.
88 * Also, Wine should adjust for the hardware timer
89 * to reduce the amount of error to ~1ms.
90 * I can't be bothered, can you?
92 pTimerInfo->dwmsSinceStart = pTimerInfo->dwmsThisVM = GetTickCount();
97 /**********************************************************************
100 int USER_InitApp(HINSTANCE hInstance)
104 /* Create task message queue */
105 queueSize = GetProfileInt( "windows", "DefaultQueueSize", 8 );
106 if (!SetMessageQueue( queueSize )) return 0;
111 /**********************************************************************
114 void USER_AppExit(HTASK hTask, HINSTANCE hInstance, HQUEUE hQueue)
116 /* FIXME: flush send messages (which are not implemented yet),
117 * empty clipboard if needed, maybe destroy menus (Windows
118 * only complains about them but does nothing);
121 WND* desktop = WIN_GetDesktop();
123 /* Patch desktop window queue */
124 if( desktop->hmemTaskQ == hQueue )
125 desktop->hmemTaskQ = GetTaskQueue(TASK_GetNextTask(hTask));
129 TIMER_NukeTimers( 0, hQueue );
131 HOOK_FreeQueueHooks( hQueue );
133 /* Nuke orphaned windows */
135 WIN_DestroyQueueWindows( desktop->child, hQueue );
137 /* Free the message queue */
139 QUEUE_DeleteMsgQueue( hQueue );