3 * Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22 extern ULONG UiScreenWidth
; // Screen Width
23 extern ULONG UiScreenHeight
; // Screen Height
25 extern UCHAR UiStatusBarFgColor
; // Status bar foreground color
26 extern UCHAR UiStatusBarBgColor
; // Status bar background color
27 extern UCHAR UiBackdropFgColor
; // Backdrop foreground color
28 extern UCHAR UiBackdropBgColor
; // Backdrop background color
29 extern UCHAR UiBackdropFillStyle
; // Backdrop fill style
30 extern UCHAR UiTitleBoxFgColor
; // Title box foreground color
31 extern UCHAR UiTitleBoxBgColor
; // Title box background color
32 extern UCHAR UiMessageBoxFgColor
; // Message box foreground color
33 extern UCHAR UiMessageBoxBgColor
; // Message box background color
34 extern UCHAR UiMenuFgColor
; // Menu foreground color
35 extern UCHAR UiMenuBgColor
; // Menu background color
36 extern UCHAR UiTextColor
; // Normal text color
37 extern UCHAR UiSelectedTextColor
; // Selected text color
38 extern UCHAR UiSelectedTextBgColor
; // Selected text background color
39 extern UCHAR UiEditBoxTextColor
; // Edit box text color
40 extern UCHAR UiEditBoxBgColor
; // Edit box text background color
42 extern CHAR UiTitleBoxTitleText
[260]; // Title box's title text
44 extern BOOLEAN UiUseSpecialEffects
; // Tells us if we should use fade effects
45 extern BOOLEAN UiCenterMenu
;
46 extern BOOLEAN UiMenuBox
;
47 extern CHAR UiTimeText
[];
48 extern BOOLEAN UiDrawTime
;
50 extern const CHAR UiMonthNames
[12][15];
52 ///////////////////////////////////////////////////////////////////////////////////////
54 // User Interface Functions
56 ///////////////////////////////////////////////////////////////////////////////////////
57 BOOLEAN
UiInitialize(BOOLEAN ShowGui
); // Initialize User-Interface
58 VOID
UiUnInitialize(PCSTR BootText
); // Un-initialize User-Interface
59 VOID
UiDrawBackdrop(VOID
); // Fills the entire screen with a backdrop
60 VOID
UiFillArea(ULONG Left
, ULONG Top
, ULONG Right
, ULONG Bottom
, CHAR FillChar
, UCHAR Attr
/* Color Attributes */); // Fills the area specified with FillChar and Attr
61 VOID
UiDrawShadow(ULONG Left
, ULONG Top
, ULONG Right
, ULONG Bottom
); // Draws a shadow on the bottom and right sides of the area specified
62 VOID
UiDrawBox(ULONG Left
, ULONG Top
, ULONG Right
, ULONG Bottom
, UCHAR VertStyle
, UCHAR HorzStyle
, BOOLEAN Fill
, BOOLEAN Shadow
, UCHAR Attr
); // Draws a box around the area specified
63 VOID
UiDrawText(ULONG X
, ULONG Y
, PCSTR Text
, UCHAR Attr
); // Draws text at coordinates specified
64 VOID
UiDrawText2(ULONG X
, ULONG Y
, ULONG MaxNumChars
, PCSTR Text
, UCHAR Attr
); // Draws text at coordinates specified
65 VOID
UiDrawCenteredText(ULONG Left
, ULONG Top
, ULONG Right
, ULONG Bottom
, PCSTR TextString
, UCHAR Attr
); // Draws centered text at the coordinates specified and clips the edges
66 VOID
UiDrawStatusText(PCSTR StatusText
); // Draws text at the very bottom line on the screen
67 VOID
UiUpdateDateTime(VOID
); // Updates the date and time
68 VOID
UiInfoBox(PCSTR MessageText
); // Displays a info box on the screen
69 VOID
UiMessageBox(PCSTR Format
, ...); // Displays a message box on the screen with an ok button
70 VOID
UiMessageBoxCritical(PCSTR MessageText
); // Displays a message box on the screen with an ok button using no system resources
71 VOID
UiDrawProgressBarCenter(ULONG Position
, ULONG Range
, PCHAR ProgressText
); // Draws the progress bar showing nPos percent filled
72 VOID
UiDrawProgressBar(ULONG Left
, ULONG Top
, ULONG Right
, ULONG Bottom
, ULONG Position
, ULONG Range
, PCHAR ProgressText
); // Draws the progress bar showing nPos percent filled
74 // Displays all the message boxes in a given section.
76 UiShowMessageBoxesInSection(
77 IN ULONG_PTR SectionId
);
80 UiShowMessageBoxesInArgv(
84 VOID
UiEscapeString(PCHAR String
); // Processes a string and changes all occurrences of "\n" to '\n'
85 BOOLEAN
UiEditBox(PCSTR MessageText
, PCHAR EditTextBuffer
, ULONG Length
);
87 UCHAR
UiTextToColor(PCSTR ColorText
); // Converts the text color into it's equivalent color value
88 UCHAR
UiTextToFillStyle(PCSTR FillStyleText
); // Converts the text fill into it's equivalent fill value
90 VOID
UiTruncateStringEllipsis(PCHAR StringText
, ULONG MaxChars
); // Truncates a string to MaxChars by adding an ellipsis on the end '...'
92 VOID
UiFadeInBackdrop(VOID
); // Draws the backdrop and fades the screen in
93 VOID
UiFadeOut(VOID
); // Fades the screen out
95 ///////////////////////////////////////////////////////////////////////////////////////
99 ///////////////////////////////////////////////////////////////////////////////////////
101 typedef struct tagUI_MENU_INFO
105 BOOLEAN ShowBootOptions
;
109 LONG MenuTimeRemaining
;
110 ULONG SelectedMenuItem
;
117 } UI_MENU_INFO
, *PUI_MENU_INFO
;
121 (*UiMenuKeyPressFilterCallback
)(
123 IN ULONG SelectedMenuItem
,
124 IN PVOID Context OPTIONAL
);
129 IN PCSTR MenuFooter OPTIONAL
,
130 IN BOOLEAN ShowBootOptions
,
131 IN PCSTR MenuItemList
[],
132 IN ULONG MenuItemCount
,
133 IN ULONG DefaultMenuItem
,
135 OUT PULONG SelectedMenuItem
,
136 IN BOOLEAN CanEscape
,
137 IN UiMenuKeyPressFilterCallback KeyPressFilter OPTIONAL
,
138 IN PVOID Context OPTIONAL
);
140 ///////////////////////////////////////////////////////////////////////////////////////
144 ///////////////////////////////////////////////////////////////////////////////////////
145 typedef struct tagUIVTBL
147 BOOLEAN (*Initialize
)(VOID
);
148 VOID (*UnInitialize
)(VOID
);
150 VOID (*DrawBackdrop
)(VOID
);
151 VOID (*FillArea
)(ULONG Left
, ULONG Top
, ULONG Right
, ULONG Bottom
, CHAR FillChar
, UCHAR Attr
);
152 VOID (*DrawShadow
)(ULONG Left
, ULONG Top
, ULONG Right
, ULONG Bottom
);
153 VOID (*DrawBox
)(ULONG Left
, ULONG Top
, ULONG Right
, ULONG Bottom
, UCHAR VertStyle
, UCHAR HorzStyle
, BOOLEAN Fill
, BOOLEAN Shadow
, UCHAR Attr
);
154 VOID (*DrawText
)(ULONG X
, ULONG Y
, PCSTR Text
, UCHAR Attr
);
155 VOID (*DrawText2
)(ULONG X
, ULONG Y
, ULONG MaxNumChars
, PCSTR Text
, UCHAR Attr
);
156 VOID (*DrawCenteredText
)(ULONG Left
, ULONG Top
, ULONG Right
, ULONG Bottom
, PCSTR TextString
, UCHAR Attr
);
157 VOID (*DrawStatusText
)(PCSTR StatusText
);
158 VOID (*UpdateDateTime
)(VOID
);
159 VOID (*MessageBox
)(PCSTR MessageText
);
160 VOID (*MessageBoxCritical
)(PCSTR MessageText
);
161 VOID (*DrawProgressBarCenter
)(ULONG Position
, ULONG Range
, PCHAR ProgressText
);
162 VOID (*DrawProgressBar
)(ULONG Left
, ULONG Top
, ULONG Right
, ULONG Bottom
, ULONG Position
, ULONG Range
, PCHAR ProgressText
);
163 BOOLEAN (*EditBox
)(PCSTR MessageText
, PCHAR EditTextBuffer
, ULONG Length
);
164 UCHAR (*TextToColor
)(PCSTR ColorText
);
165 UCHAR (*TextToFillStyle
)(PCSTR FillStyleText
);
166 VOID (*FadeInBackdrop
)(VOID
);
167 VOID (*FadeOut
)(VOID
);
169 BOOLEAN (*DisplayMenu
)(
171 IN PCSTR MenuFooter OPTIONAL
,
172 IN BOOLEAN ShowBootOptions
,
173 IN PCSTR MenuItemList
[],
174 IN ULONG MenuItemCount
,
175 IN ULONG DefaultMenuItem
,
177 OUT PULONG SelectedMenuItem
,
178 IN BOOLEAN CanEscape
,
179 IN UiMenuKeyPressFilterCallback KeyPressFilter OPTIONAL
,
180 IN PVOID Context OPTIONAL
);
182 VOID (*DrawMenu
)(PUI_MENU_INFO MenuInfo
);
185 VOID
UiInit(const char *CmdLine
);
187 extern UIVTBL UiVtbl
;
190 * Combines the foreground and background colors into a single attribute byte
192 #define ATTR(cFore, cBack) ((cBack << 4)|cFore)
195 * Fill styles for DrawBackdrop()
197 #define LIGHT_FILL 0xB0
198 #define MEDIUM_FILL 0xB1
199 #define DARK_FILL 0xB2
204 #define COLOR_BLACK 0
206 #define COLOR_GREEN 2
209 #define COLOR_MAGENTA 5
210 #define COLOR_BROWN 6
213 #define COLOR_DARKGRAY 8
214 #define COLOR_LIGHTBLUE 9
215 #define COLOR_LIGHTGREEN 10
216 #define COLOR_LIGHTCYAN 11
217 #define COLOR_LIGHTRED 12
218 #define COLOR_LIGHTMAGENTA 13
219 #define COLOR_YELLOW 14
220 #define COLOR_WHITE 15
222 /* Add COLOR_BLINK to a background to cause blinking */
223 //#define COLOR_BLINK 8
226 * Defines for IBM box drawing characters
228 #define HORZ (0xc4) /* Single horizontal line */
229 #define D_HORZ (0xcd) /* Double horizontal line.*/
230 #define VERT (0xb3) /* Single vertical line */
231 #define D_VERT (0xba) /* Double vertical line. */