376 lines
9.9 KiB
Plaintext
376 lines
9.9 KiB
Plaintext
|
This file details an interface to be used to supply locale/language-specific
|
|||
|
function for display, keyboard handling, etc, within text setup.
|
|||
|
|
|||
|
The goals are as follows:
|
|||
|
|
|||
|
1) Provide a straightforward means for supporting fully localized text display,
|
|||
|
keyboard handling, and other features, in various locales, especially
|
|||
|
Far Eastern ones.
|
|||
|
|
|||
|
2) Avoid impacting setupdd.sys's size or performance when such function is not
|
|||
|
required.
|
|||
|
|
|||
|
To this end features such as DBCS font support, locale-specific keyboard detection,
|
|||
|
and various other features are to be removed and placed into an export driver.
|
|||
|
Setupdd.sys will be linked such that this driver is automatically referenced
|
|||
|
and loaded when setupdd.sys is loaded. Setupdd.sys will itself export a set of
|
|||
|
routines for use by the language-specific driver when carrying out its function.
|
|||
|
|
|||
|
Language-specific drivers will be built in the setup\textmode\spddlang directory.
|
|||
|
Such drivers are logically part of setupdd.sys. No special set of include files
|
|||
|
will be created for the interfaces below; they will be contained in various
|
|||
|
header files in setup\textmode\kernel. Language-specific drivers' SOURCES files
|
|||
|
should be set up so they include setup\textmode\kernel in their INCLUDES and
|
|||
|
#include spprecmp.h.
|
|||
|
|
|||
|
*******************************************************************************
|
|||
|
|
|||
|
The functions listed below must be exported from every language-specific driver.
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
SplangInitializeFontSupport(
|
|||
|
IN PCWSTR BootDevicePath,
|
|||
|
IN PCWSTR DirectoryOnBootDevice
|
|||
|
);
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
This routine is called by setupdd.sys to allow the language-specific
|
|||
|
font support to be initialized. The language-specific driver should
|
|||
|
load any font it requires and perform any additioanl initialization.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
BootDevicePath - supplies the path of the device from which the system
|
|||
|
booted. This is a full NT-style path that includes a directory spec.
|
|||
|
|
|||
|
DirectoryOnBootDevice - supplies directory relative to root of boot
|
|||
|
device.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
NT Status code indicating outcome. If this routine returns a non-success
|
|||
|
status code, then setupdd.sys will not switch into non-US character mode.
|
|||
|
The implementation of this routine is free to call SpBugCheck or otherwise
|
|||
|
inform the user of any errors if it wishes to halt setup if font
|
|||
|
initialization fails.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
SplangTerminateFontSupport(
|
|||
|
VOID
|
|||
|
);
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
This routine may be called in certain conditions to cause font support
|
|||
|
for a particular language to be terminated. The implementation should
|
|||
|
clean up any resources allocated during SplangInitializeFontSupport().
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
NT Status code indicating outcome.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
|
|||
|
PVIDEO_FUNCTION_VECTOR
|
|||
|
SplangGetVideoFunctionVector(
|
|||
|
IN SpVideoType VideoType,
|
|||
|
IN PSP_VIDEO_VARS VideoVariableBlock
|
|||
|
);
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
This routine is called by setupdd.sys upon successful return from
|
|||
|
SplangInitializeFontSupport, to request a pointer to a vector of
|
|||
|
language-specific display support routines for a given display
|
|||
|
type (vga or frame buffer).
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
VideoType - a value from the SpVideoType enum indicating which display
|
|||
|
vector is requested. Currently one of SpVideoVga or SpVideoFrameBuffer.
|
|||
|
|
|||
|
VideoVariableBlock - supplies a pointer to a block of video variables that
|
|||
|
are shared between the high-level code in setup\textmode\spvideo.c and
|
|||
|
the display-specific code.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
Pointer to the language-specific video functions vector to use for
|
|||
|
displaying text. NULL if the requested type is not supported. In this case
|
|||
|
the display will not be switched into non-US character mode.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
|
|||
|
ULONG
|
|||
|
SplangGetColumnCount(
|
|||
|
IN PCWSTR String
|
|||
|
);
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
This routine is called by setupdd.sys to determine how many columns
|
|||
|
on the screen a particular string will occupy. This may be different
|
|||
|
than the number of characters in the string due to full/half width
|
|||
|
characters in the character set, etc. Full width chars occupy two columns
|
|||
|
whereas half-width chars occupy one column. If the font in use is
|
|||
|
fixed-pitch or does not support DBCS, the number of columns is by
|
|||
|
definition equal to the number of characters in the string.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
String - points to unicode string whose width in columns is desired.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
Number of columns occupied by the string.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
|
|||
|
PWSTR
|
|||
|
SplangPadString(
|
|||
|
IN int Size,
|
|||
|
IN PCWSTR String
|
|||
|
);
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
This routine is called by setupdd.sys to generate a padded string
|
|||
|
appropriate for SBCS or DBCS as appropriate.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
Size - specifies the length to which to pad the string.
|
|||
|
|
|||
|
String - points to unicode string that needs to be padded.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
Pointer to padded string. Note that this is a static buffer and thus
|
|||
|
the caller must duplicate the string if it is needed across multiple
|
|||
|
calls to this routine.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
|
|||
|
VOID
|
|||
|
SplangSelectKeyboard(
|
|||
|
IN BOOLEAN UnattendedMode,
|
|||
|
IN PVOID SifHandle,
|
|||
|
IN PHARDWARE_COMPONENT *HwComponents
|
|||
|
);
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
This routine is called by setupdd.sys to allow language-specific processing
|
|||
|
for the keyboard selection. The implementation can confirm a keyboard
|
|||
|
type at this time.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
UnattendedMode - supplies a flag indicating whether we are running in
|
|||
|
unattended mode. If so, the implementation may wish to do nothing,
|
|||
|
since the user will not be entering any paths.
|
|||
|
|
|||
|
SifHandle - supplies handle to open setup information file (txtsetup.sif).
|
|||
|
|
|||
|
HwComponents - supplies the address of the master hardware components
|
|||
|
array.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
None. If a failure occurs, it is up to the implementation to decide whether
|
|||
|
to continue or to SpBugCheck.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
|
|||
|
VOID
|
|||
|
SplangReinitializeKeyboard(
|
|||
|
IN BOOLEAN UnattendedMode,
|
|||
|
IN PVOID SifHandle,
|
|||
|
IN PWSTR Directory,
|
|||
|
OUT PVOID *KeyboardVector,
|
|||
|
IN PHARDWARE_COMPONENT *HwComponents
|
|||
|
);
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
This routine is called by setupdd.sys to allow language-specific processing
|
|||
|
for the keyboard. The implementation can reinitialize the keyboard layout
|
|||
|
at this time.
|
|||
|
|
|||
|
This routine will be called before the user is asked to enter any paths
|
|||
|
or other text that includes typing anything other than keys such as
|
|||
|
ENTER, function keys, backspace, escape, etc.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
UnattendedMode - supplies a flag indicating whether we are running in
|
|||
|
unattended mode. If so, the implementation may wish to do nothing,
|
|||
|
since the user will not be entering any paths.
|
|||
|
|
|||
|
SifHandle - supplies handle to open setup information file (txtsetup.sif).
|
|||
|
|
|||
|
Directory - supplies the directory on the boot device from which the
|
|||
|
new layout dll is to be loaded.
|
|||
|
|
|||
|
KeyboardVector - supplies the address of a pointer to the keyboard
|
|||
|
vector table. The implementation should overwrite this value with
|
|||
|
whatever is returned from SpLoadKbdLayoutDll().
|
|||
|
|
|||
|
HwComponents - supplies the address of the master hardware components
|
|||
|
array.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
None. If a failure occurs the implementation must leave the currently active
|
|||
|
keybaord in place.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
|
|||
|
WCHAR
|
|||
|
SplangGetLineDrawChar(
|
|||
|
IN LineCharIndex WhichChar
|
|||
|
);
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
This routine is called by setupdd.sys to retreive the unicode value for
|
|||
|
a particular line drawing character. An implementation must make these
|
|||
|
characters available in the character set somehow.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
WhichChar - supplies the index of the character desired.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
Unicode value for the character in question. Because the character
|
|||
|
will be displayed using the language-specific module, the implementation
|
|||
|
can materialize this character by playing whatever tricks it needs to,
|
|||
|
such as overlaying a hardcoded glyph into the character set, etc.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
|
|||
|
WCHAR
|
|||
|
SplangGetCursorChar(
|
|||
|
VOID
|
|||
|
);
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
This routine is called by setupdd.sys to retreive the unicode value
|
|||
|
of a character to be used as the cursor when the user is asked to
|
|||
|
enter text.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
Unicode value for the character to be used as the cursor.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
SplangSetRegistryData(
|
|||
|
IN PVOID SifHandle,
|
|||
|
IN HANDLE ControlSetKeyHandle,
|
|||
|
IN PHARDWARE_COMPONENT *HwComponents
|
|||
|
);
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
This routine is called by setupdd.sys to cause language-specific
|
|||
|
information to be written into the current control set in the registry.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
SifHandle - supplies a handle to the open setup information file
|
|||
|
(txtsetup.sif).
|
|||
|
|
|||
|
ControlSetKeyHandle - supplies a handle to the current control set
|
|||
|
root in the registry (ie, HKEY_LOCAL_MACHINE\CurrentControlSet).
|
|||
|
|
|||
|
HwComponents - supplies the address of the master hardware components
|
|||
|
array.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
NT Status value indicating outcome. A non-success status is considered
|
|||
|
critical and causes Setup to abort.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
SplangQueryMinimizeExtraSpacing(
|
|||
|
VOID
|
|||
|
);
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
This routine is called by setupdd.sys to determine whether to
|
|||
|
eliminate uses of extra spacing on the screen to set off things
|
|||
|
like menus and lists from text. Languages whose text takes up
|
|||
|
a lot of room on the screen might opt to eliminate such spacing
|
|||
|
to allow menus to display more than a couple of items at a time, etc.
|
|||
|
|
|||
|
The return value affects numerous screens, such as the partition menu,
|
|||
|
upgrade lists, etc.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
Boolean value indicating whether the implementation wants unnecessary
|
|||
|
spaces eliminated when text, menu, etc, are displayed.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
*******************************************************************************
|
|||
|
|
|||
|
The functions listed below are exported from setupdd.sys for use by
|
|||
|
language-specific drivers. Such drivers are free to use any NT API normally
|
|||
|
available to NT device drivers in addition to the routines listed below.
|
|||
|
|
|||
|
|