+static VOID
+UpdateVdmMenuMouse(VOID)
+{
+ WCHAR szMenuString[256];
+
+ /* Update "Hide/Show mouse" menu item */
+ if (LoadStringW(GetModuleHandle(NULL),
+ (!ShowPointer ? IDS_SHOW_MOUSE : IDS_HIDE_MOUSE),
+ szMenuString,
+ ARRAYSIZE(szMenuString)) > 0)
+ {
+ ModifyMenuW(hConsoleMenu, ID_SHOWHIDE_MOUSE,
+ MF_BYCOMMAND, ID_SHOWHIDE_MOUSE, szMenuString);
+ }
+}
+
+/*static*/ VOID
+UpdateVdmMenuDisks(VOID)
+{
+ UINT_PTR ItemID;
+ USHORT i;
+
+ CHAR szNoMedia[100];
+ CHAR szMenuString1[256], szMenuString2[256];
+
+ /* Update the disks menu items */
+
+ LoadStringA(GetModuleHandle(NULL),
+ IDS_NO_MEDIA,
+ szNoMedia,
+ ARRAYSIZE(szNoMedia));
+
+ LoadStringA(GetModuleHandle(NULL),
+ IDS_VDM_MOUNT_FLOPPY,
+ szMenuString1,
+ ARRAYSIZE(szMenuString1));
+
+ for (i = 0; i < ARRAYSIZE(GlobalSettings.FloppyDisks); ++i)
+ {
+ ItemID = ID_VDM_DRIVES + (2 * i);
+
+ if (GlobalSettings.FloppyDisks[i].Length != 0 &&
+ GlobalSettings.FloppyDisks[i].Buffer &&
+ GlobalSettings.FloppyDisks[i].Buffer != '\0')
+ {
+ /* Update item text */
+ _snprintf(szMenuString2, ARRAYSIZE(szMenuString2), szMenuString1, i, GlobalSettings.FloppyDisks[i].Buffer);
+ szMenuString2[ARRAYSIZE(szMenuString2) - 1] = ANSI_NULL;
+ ModifyMenuA(hConsoleMenu, ItemID, MF_BYCOMMAND | MF_STRING, ItemID, szMenuString2);
+
+ /* Enable the eject item */
+ EnableMenuItem(hConsoleMenu, ItemID + 1, MF_BYCOMMAND | MF_ENABLED);
+ }
+ else
+ {
+ /* Update item text */
+ _snprintf(szMenuString2, ARRAYSIZE(szMenuString2), szMenuString1, i, szNoMedia);
+ szMenuString2[ARRAYSIZE(szMenuString2) - 1] = ANSI_NULL;
+ ModifyMenuA(hConsoleMenu, ItemID, MF_BYCOMMAND | MF_STRING, ItemID, szMenuString2);
+
+ /* Disable the eject item */
+ EnableMenuItem(hConsoleMenu, ItemID + 1, MF_BYCOMMAND | MF_GRAYED);
+ }
+ }
+}
+
+static VOID ShowHideMousePointer(HANDLE ConOutHandle, BOOLEAN ShowPtr)
+{
+ if (ShowPtr)
+ {
+ /* Be sure the cursor will be shown */
+ while (ShowConsoleCursor(ConOutHandle, TRUE) < 0) ;
+ }
+ else
+ {
+ /* Be sure the cursor will be hidden */
+ while (ShowConsoleCursor(ConOutHandle, FALSE) >= 0) ;
+ }
+}
+
+static VOID
+UpdateVdmMenu(VOID)
+{
+ // This is a temporary HACK until I find the most elegant way
+ // to synchronize mouse cursor display with console screenbuffer switches.
+ ShowHideMousePointer(CurrentConsoleOutput, ShowPointer);
+
+ UpdateVdmMenuMouse();
+ UpdateVdmMenuDisks();
+}
+