https://git.reactos.org/?p=reactos.git;a=commitdiff;h=ff8d8a81621d3e036fc92…
commit ff8d8a81621d3e036fc92e6c400b831ac973ef5b
Author: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
AuthorDate: Sun Dec 24 16:54:48 2017 +0100
Revert 57c0678 (PR #194) that has been erroneously committed too early.
---
ntoskrnl/ex/init.c | 2 +-
ntoskrnl/inbv/inbv.c | 235 +++++----------------------------------
ntoskrnl/inbv/logo/line.bmp | Bin 2038 -> 0 bytes
ntoskrnl/include/internal/inbv.h | 15 +--
ntoskrnl/include/resource.h | 3 -
ntoskrnl/ntoskrnl.rc | 1 -
6 files changed, 28 insertions(+), 228 deletions(-)
diff --git a/ntoskrnl/ex/init.c b/ntoskrnl/ex/init.c
index e4ffdd63bd..71f27efe60 100644
--- a/ntoskrnl/ex/init.c
+++ b/ntoskrnl/ex/init.c
@@ -1382,7 +1382,7 @@ Phase1InitializationDiscard(IN PVOID Context)
/* Setup the boot driver */
InbvEnableBootDriver(!NoGuiBoot);
- InbvDriverInitialize(LoaderBlock, IDB_MAX_RESOURCE);
+ InbvDriverInitialize(LoaderBlock, 18);
/* Check if GUI boot is enabled */
if (!NoGuiBoot)
diff --git a/ntoskrnl/inbv/inbv.c b/ntoskrnl/inbv/inbv.c
index 45520c254e..698e8bf380 100644
--- a/ntoskrnl/inbv/inbv.c
+++ b/ntoskrnl/inbv/inbv.c
@@ -27,7 +27,7 @@
/*
* Enable this define when Inbv will support rotating progress bar.
*/
-#define INBV_ROTBAR_IMPLEMENTED
+// #define INBV_ROTBAR_IMPLEMENTED
static KSPIN_LOCK BootDriverLock;
static KIRQL InbvOldIrql;
@@ -41,19 +41,12 @@ static INBV_PROGRESS_STATE InbvProgressState;
static BT_PROGRESS_INDICATOR InbvProgressIndicator = {0, 25, 0};
static INBV_RESET_DISPLAY_PARAMETERS InbvResetDisplayParameters = NULL;
static ULONG ResourceCount = 0;
-static PUCHAR ResourceList[1 + IDB_MAX_RESOURCE]; // First entry == NULL, followed by
'ResourceCount' entries.
+static PUCHAR ResourceList[1 + IDB_CLUSTER_SERVER]; // First entry == NULL, followed by
'ResourceCount' entries.
#ifdef INBV_ROTBAR_IMPLEMENTED
-/*
- * Change this to modify progress bar behaviour
- */
-#define ROT_BAR_DEFAULT_MODE RB_PROGRESS_BAR
static BOOLEAN RotBarThreadActive = FALSE;
static ROT_BAR_TYPE RotBarSelection;
static ULONG PltRotBarStatus;
-static PVOID RotBarThread = NULL;
-static UCHAR RotBarBuffer[24 * 9];
-static UCHAR RotLineBuffer[640 * 6];
#endif
@@ -769,147 +762,6 @@ NtDisplayString(IN PUNICODE_STRING DisplayString)
return STATUS_SUCCESS;
}
-#ifdef INBV_ROTBAR_IMPLEMENTED
-static
-VOID
-NTAPI
-InbvRotationThread(
- _In_ PVOID Context)
-{
- ULONG X, Y, Index, Total = 18;
- LARGE_INTEGER Delay;
-
- InbvAcquireLock();
- if (RotBarSelection == RB_SQUARE_CELLS)
- {
- Delay.QuadPart = -800000; // 0.08 sec
- Index = 0;
- }
- else
- {
- Delay.QuadPart = -600000; // 0.06 sec
- Index = 32;
- }
- X = ProgressBarLeft + 2;
- Y = ProgressBarTop + 2;
- InbvReleaseLock();
-
- while (InbvDisplayState == INBV_DISPLAY_STATE_OWNED && PltRotBarStatus != 3)
- {
- InbvAcquireLock();
-
- if (RotBarSelection == RB_SQUARE_CELLS)
- {
- if (Index >= 3)
- {
- /* Fill previous bar position */
- VidSolidColorFill(X + ((Index - 3) * 8), Y, (X + ((Index - 3) * 8)) + 8 -
1, Y + 9 - 1, 0);
- }
- if (Index < Total - 1)
- {
- /* Draw the progress bar bit */
- if (Index < 2)
- {
- /* Appearing from the left */
- VidBufferToScreenBlt(RotBarBuffer + 8 * (2 - Index) / 2, X, Y, 22 - 8
* (2 - Index), 9, 24);
- }
- else if (Index >= Total - 3)
- {
- /* Hiding to the right */
- VidBufferToScreenBlt(RotBarBuffer, X + ((Index - 2) * 8), Y, 22 - 8 *
(4 - (Total - Index)), 9, 24);
- }
- else
- {
- VidBufferToScreenBlt(RotBarBuffer, X + ((Index - 2) * 8), Y, 22, 9,
24);
- }
- }
- Index = (Index + 1) % Total;
- }
- else if (RotBarSelection == RB_PROGRESS_BAR)
- {
- /* Right part */
- VidBufferToScreenBlt(RotLineBuffer, Index, 474, 640 - Index, 6, 640);
- if (Index > 0)
- {
- /* Left part */
- VidBufferToScreenBlt(RotLineBuffer + (640 - Index) / 2, 0, 474, Index -
2, 6, 640);
- }
- Index = (Index + 32) % 640;
- }
-
- InbvReleaseLock();
-
- /* Wait for a bit */
- KeDelayExecutionThread(KernelMode, FALSE, &Delay);
- }
- PsTerminateSystemThread(STATUS_SUCCESS);
-}
-
-VOID
-NTAPI
-INIT_FUNCTION
-InbvRotBarInit(VOID)
-{
- NTSTATUS Status;
- HANDLE ThreadHandle = NULL;
-
- if (!InbvBootDriverInstalled || RotBarSelection == RB_UNSPECIFIED)
- return;
-
- RotBarThread = NULL;
- PltRotBarStatus = 0;
-
- Status = PsCreateSystemThread(&ThreadHandle,
- SYNCHRONIZE,
- NULL,
- NULL,
- NULL,
- InbvRotationThread,
- NULL);
-
- if (NT_SUCCESS(Status))
- {
- Status = ObReferenceObjectByHandle(ThreadHandle,
- SYNCHRONIZE,
- PsThreadType,
- KernelMode,
- &RotBarThread,
- NULL);
- if (NT_SUCCESS(Status))
- {
- KeSetPriorityThread(RotBarThread, HIGH_PRIORITY);
- RotBarThreadActive = TRUE;
- }
- ObCloseHandle(ThreadHandle, KernelMode);
- }
-}
-
-VOID
-NTAPI
-INIT_FUNCTION
-InbvRotBarStop(VOID)
-{
- if (!RotBarThread)
- {
- RotBarThreadActive = FALSE;
- return;
- }
-
- InbvAcquireLock();
- PltRotBarStatus = 3;
- InbvReleaseLock();
-
- KeWaitForSingleObject(RotBarThread,
- Executive,
- KernelMode,
- FALSE,
- NULL);
- ObDereferenceObject(RotBarThread);
- RotBarThread = NULL;
- RotBarThreadActive = FALSE;
-}
-#endif
-
VOID
NTAPI
INIT_FUNCTION
@@ -918,14 +770,13 @@ DisplayBootBitmap(IN BOOLEAN TextMode)
PVOID Header = NULL, Footer = NULL, Screen = NULL;
#ifdef INBV_ROTBAR_IMPLEMENTED
- UCHAR Buffer[24 * 9];
- PVOID Bar = NULL, LineBmp = NULL;
+ PVOID Bar = NULL;
ROT_BAR_TYPE TempRotBarSelection = RB_UNSPECIFIED;
- LARGE_INTEGER Delay;
#endif
#ifdef REACTOS_SKUS
PVOID Text = NULL;
+ UCHAR Buffer[64];
#endif
#ifdef INBV_ROTBAR_IMPLEMENTED
@@ -933,7 +784,9 @@ DisplayBootBitmap(IN BOOLEAN TextMode)
if (RotBarThreadActive)
{
/* Reset the progress bar */
- InbvRotBarStop();
+ InbvAcquireLock();
+ RotBarSelection = RB_UNSPECIFIED;
+ InbvReleaseLock();
}
#endif
@@ -1018,9 +871,6 @@ DisplayBootBitmap(IN BOOLEAN TextMode)
Bar = InbvGetResourceAddress(IDB_BAR_SERVER);
#endif
}
-#else
- /* Use default status bar */
- Bar = InbvGetResourceAddress(IDB_BAR_WKSTA);
#endif
/* Make sure we have a logo */
@@ -1043,7 +893,7 @@ DisplayBootBitmap(IN BOOLEAN TextMode)
#ifdef INBV_ROTBAR_IMPLEMENTED
/* Choose progress bar */
- TempRotBarSelection = ROT_BAR_DEFAULT_MODE;
+ TempRotBarSelection = RB_SQUARE_CELLS;
#endif
/* Set progress bar coordinates and display it */
@@ -1070,61 +920,28 @@ DisplayBootBitmap(IN BOOLEAN TextMode)
#endif
#ifdef INBV_ROTBAR_IMPLEMENTED
- if (Bar)
- {
- /* Save previous screen pixels to buffer */
- InbvScreenToBufferBlt(Buffer, 0, 0, 22, 9, 24);
- /* Draw the progress bar bit */
- InbvBitBlt(Bar, 0, 0);
- /* Store it in global buffer */
- InbvScreenToBufferBlt(RotBarBuffer, 0, 0, 22, 9, 24);
- /* Restore screen pixels */
- InbvBufferToScreenBlt(Buffer, 0, 0, 22, 9, 24);
- }
-
- LineBmp = InbvGetResourceAddress(IDB_ROTATING_LINE);
- if (LineBmp && TempRotBarSelection == RB_PROGRESS_BAR)
- {
- /* Draw the line */
- InbvBitBlt(LineBmp, 0, 474);
- /* Store it in global buffer */
- InbvScreenToBufferBlt(RotLineBuffer, 0, 474, 640, 6, 640);
- }
+ /* Draw the progress bar bit */
+ if (Bar) InbvBitBlt(Bar, 0, 0);
#endif
/* Display the boot logo and fade it in */
BootLogoFadeIn();
-#ifdef INBV_ROTBAR_IMPLEMENTED
- if (TempRotBarSelection != RB_PROGRESS_BAR)
- {
- /* Hide simple progress bar if not used */
- ShowProgressBar = FALSE;
- }
-
- /* Do we have a system thread? */
- if (!RotBarThreadActive)
- {
- /* We don't, initialize the progress bar */
- RotBarSelection = TempRotBarSelection;
- InbvRotBarInit();
- }
+ /* Set filter which will draw text display if needed */
+ InbvInstallDisplayStringFilter(DisplayFilter);
+ }
- /* Start rotating bar */
+#ifdef INBV_ROTBAR_IMPLEMENTED
+ /* Do we have a system thread? */
+ if (RotBarThreadActive)
+ {
+ /* We do, initialize the progress bar */
InbvAcquireLock();
- PltRotBarStatus = 1;
+ RotBarSelection = TempRotBarSelection;
+ // InbvRotBarInit();
InbvReleaseLock();
-
- if (TempRotBarSelection != RB_UNSPECIFIED)
- {
- Delay.QuadPart = -3000000; // 0.3 sec
- KeDelayExecutionThread(KernelMode, FALSE, &Delay);
- }
-#endif
-
- /* Set filter which will draw text display if needed */
- InbvInstallDisplayStringFilter(DisplayFilter);
}
+#endif
}
VOID
@@ -1156,10 +973,6 @@ NTAPI
INIT_FUNCTION
FinalizeBootLogo(VOID)
{
-#ifdef INBV_ROTBAR_IMPLEMENTED
- /* Reset rotation bar */
- InbvRotBarStop();
-#endif
/* Acquire lock and check the display state */
InbvAcquireLock();
if (InbvGetDisplayState() == INBV_DISPLAY_STATE_OWNED)
@@ -1167,6 +980,10 @@ FinalizeBootLogo(VOID)
/* Clear the screen */
VidSolidColorFill(0, 0, 639, 479, 0);
}
- /* Reset lock */
+
+ /* Reset progress bar and lock */
+#ifdef INBV_ROTBAR_IMPLEMENTED
+ PltRotBarStatus = 3;
+#endif
InbvReleaseLock();
}
diff --git a/ntoskrnl/inbv/logo/line.bmp b/ntoskrnl/inbv/logo/line.bmp
deleted file mode 100644
index d080cad7bb..0000000000
Binary files a/ntoskrnl/inbv/logo/line.bmp and /dev/null differ
diff --git a/ntoskrnl/include/internal/inbv.h b/ntoskrnl/include/internal/inbv.h
index c1d901ba5a..84d44ba03a 100644
--- a/ntoskrnl/include/internal/inbv.h
+++ b/ntoskrnl/include/internal/inbv.h
@@ -17,8 +17,7 @@ typedef struct _BT_PROGRESS_INDICATOR
typedef enum _ROT_BAR_TYPE
{
RB_UNSPECIFIED,
- RB_SQUARE_CELLS,
- RB_PROGRESS_BAR
+ RB_SQUARE_CELLS
} ROT_BAR_TYPE;
VOID
@@ -27,18 +26,6 @@ InbvUpdateProgressBar(
IN ULONG Progress
);
-VOID
-NTAPI
-InbvRotBarInit(
- VOID
-);
-
-VOID
-NTAPI
-InbvRotBarStop(
- VOID
-);
-
BOOLEAN
NTAPI
InbvDriverInitialize(
diff --git a/ntoskrnl/include/resource.h b/ntoskrnl/include/resource.h
index 2f7c22b1cc..d58d7913f9 100644
--- a/ntoskrnl/include/resource.h
+++ b/ntoskrnl/include/resource.h
@@ -10,7 +10,6 @@
#define IDB_BAR_SERVER 4
#define IDB_BAR_WKSTA 8
#define IDB_BAR_HOME 9
-#define IDB_ROTATING_LINE 19
#define IDB_PROF_TEXT 10
#define IDB_HOME_TEXT 11
@@ -22,5 +21,3 @@
#define IDB_SERVER_FOOTER 15
#define IDB_STORAGE_SERVER 16
#define IDB_CLUSTER_SERVER 17
-
-#define IDB_MAX_RESOURCE IDB_ROTATING_LINE
diff --git a/ntoskrnl/ntoskrnl.rc b/ntoskrnl/ntoskrnl.rc
index dbe2caccc0..93595d0a42 100644
--- a/ntoskrnl/ntoskrnl.rc
+++ b/ntoskrnl/ntoskrnl.rc
@@ -39,4 +39,3 @@ IDB_BAR_WKSTA BITMAP "inbv/logo/8.bmp"
IDB_SERVER_LOGO BITMAP "inbv/logo/5.bmp"
IDB_SERVER_HEADER BITMAP "inbv/logo/14.bmp"
IDB_SERVER_FOOTER BITMAP "inbv/logo/15.bmp"
-IDB_ROTATING_LINE BITMAP "inbv/logo/line.bmp"