Commit graph

96 commits

Author SHA1 Message Date
Katayama Hirofumi MZ
13cf4c52f5
[USETUP] Speed up DoFileCopy +24% (#5089)
Make STRING_COPYING cached. CORE-18838
2023-02-24 10:19:53 +09:00
Katayama Hirofumi MZ
3c5a56ed93
[USETUP][VGAFONTS] Improve Romanian character display (#4750)
- Modify media/vgafonts/28606-8x8.bin Romanian VGA font to display special characters.
- Add global variables for special characters "Char..." for Romanian VGA font.
- Toggle the global variables "Char..." in SetConsoleCodePage function.
CORE-18446
2022-10-08 07:46:00 +09:00
Hermès Bélusca-Maïto
9393fc320e
[FORMATTING] Remove trailing whitespace. Addendum to 34593d93.
Excluded: 3rd-party code (incl. wine) and most of the win32ss.
2021-09-13 03:52:22 +02:00
Timo Kreuzer
5d8e834897 [REACTOS] Fix a number of MSVC warnings 2021-07-23 22:03:48 +02:00
George Bișoc
3ee9535e05
[USETUP] Display some contents in the page whilst installing the bootloader (#3559)
CORE-17523
2021-04-07 10:11:07 +02:00
George Bișoc
950f78635a
[USETUP] Display the "check the FS" section as a MUI page (#3474) 2021-02-22 16:48:03 +01:00
Hermès Bélusca-Maïto
3405cab9dd
[USETUP] Only check whether the system partition is of recognized type and if not, install FreeLdr on floppy/removable media. 2021-02-01 01:48:15 +01:00
Hermès Bélusca-Maïto
8f61f5c004
[USETUP] Add partition and disk description helpers to get standardized description strings. Replace and simplify USETUP code. 2021-02-01 01:48:10 +01:00
Hermès Bélusca-Maïto
68182b2a52
[USETUP] Partial revert of 8b94515b for the ESCAPE key in the UpgradeRepairPage() screen.
The AsciiChar of the ESCAPE key should be 0x1B instead of zero; however
this is not the case due to the hacked keyboard layout currently being
used. This will be fixed later ...
2021-01-04 16:13:28 +01:00
Hermès Bélusca-Maïto
8b94515bd3
[USETUP] Fix handling of the ESCAPE key.
Its AsciiChar is not zero in Console-compatible code.
2021-01-03 00:27:50 +01:00
Hermès Bélusca-Maïto
05cd77028c
[SETUPLIB][USETUP] Cleanup some code in USETUP. Redefine FormatPartition() and ChkdskPartition() helpers
so that they wrap the needed init steps for formatting/chkdsk'ing.

These helpers now accept a PPARTENTRY, together with the usual
formatting/chkdsk parameters. The helpers now determine the actual
NT path to use, and can perform the init steps on the partition
before performing the actual operation.

In particular, FormatPartition() is now made GPT-compliant. The
partition type retrieved by FileSystemToMBRPartitionType() is now
used as a hint for choosing FAT32 over FAT12/16, and only in the
case of a MBR partition that is *NOT* a recognized OEM partition,
it is used for updating the corresponding partition type. (OEM
partitions must retain their original type.)

The OEM partition types we (and NT) can recognize are specified
e.g. in the Microsoft Open-Specification [MS-DMRP] Appendix B
https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-dmrp/5f5043a3-9e6d-40cc-a05b-1a4a3617df32

Introduce an IsOEMPartition() macro to help checking for these types
(its name is based on the Is***Partition() macros from ntdddisk.h,
and from a dmdskmgr.dll export of similar name).
2020-11-24 03:24:41 +01:00
Hermès Bélusca-Maïto
f1a4a6e704
[USETUP] Introduce two helpers for formatting displayed disk and partition sizes in order to reduce code duplication. 2020-11-04 23:26:54 +01:00
Hermès Bélusca-Maïto
13dd01b44c
[USETUP] Use pointers to const strings where meaningful. 2020-11-04 23:26:53 +01:00
Hermès Bélusca-Maïto
6c94e4f487
[USETUP] Work around GCC's complaints (will be fixed properly later on). 2020-10-20 01:32:30 +02:00
Hermès Bélusca-Maïto
08924c1850
[USETUP][SETUPLIB] Continue hiding the FAT32 format in the format list, but take it into account anyway later on.
The formatter will select it anyway as soon as the partition size
permits it. We make it available internally however so as to "emulate"
FMIFS functionality.

Now rely on the partition filesystem for InstallVBRToPartition() instead
of the unreliable and deprecated partition type.
2020-10-20 01:19:58 +02:00
Katayama Hirofumi MZ
b539dd1c5a
[USETUP][BOOTDATA] Include optional CJK standard fonts (#2336)
This PR enables the developers to include the CJK standard fonts into ReactOS by adding them in Folder modules/optional. This feature is for test purpose only. You may not use the fonts illegally.
The embeddable font files are: mingliu.ttc, simsun.ttc, mssong.ttf, msgothic.ttc, msmincho.ttc, gulim.ttc and batang.ttc.
CORE-9619
2020-02-14 10:47:20 +09:00
Bișoc George
2bf4180c80 [USETUP] Implement resource ID text based strings for MUI (#2193)
CORE-12683

Supersedes PR #612.

* [USETUP] Implement the internal MUI routines for text manipulation based on its ID and implement text resource based IDs

USETUP (the 1st stage text mode setup module) bases upon MUI (Multilingual User Interface) sub-component of USETUP which is responsible for the ability into translating the MUI pages (each page having corresponding properties like X, Y coordinates, text flags and text string buffer) in various languages.
The only problem, as of now, is that whenever you want to modify a certain property of a page, such as removing a text from the said page in the screen, you've got to rely on using CONSOLE_* specific functions and calling with hardcoded parameters, namely the coordinates.

This can become a problem as not every localized (translated) MUI page has the same properties for each language and this could lead to various issues. Therefore, assigning each entry with an ID you can remove a text by only giving its ID (and the entry page number) without having the need to specify the coordinates
as the internal MUI routine, MUIGetEntry(), automatically retrieves the entry with respective data fields.

The following commit implements:

- MUIGetEntry()
- MUIClearText()
- MUIClearStyledText()
- MUISetText()
- MUISetStyledText()
- Now the X and Y coordinate members of MUI_ENTRY are of SHORT integer type, for the sake of the general code as most of the coordination values, even the COORD structure itself, has the coordination points as SHORTs and not BYTEs.

The following MUI functions will be used to manipulate text based resources depending on their ID from the corresponding MUI entry.

* [USETUP] Make CONSOLE_ClearTextXY function public so that we can use across other files.

* [USETUP] Implement the IDs for each text MUI entry in locale files.

This mechanism follows the same principle of resource IDs in Win32 applications. Static text is merely a resource that doesn't get changed programmatically for whole of its lifetime whereas dynamic resources can change during the lifetime of the program depending on the algorithm (for example, hide that piece of text and set another one, etc.).

* [USETUP] Remove the "Press ENTER to continue" message prompt when the partition formatting begins.
2020-01-19 17:58:13 +01:00
Katayama Hirofumi MZ
bfea773ee5 [SETUPLIB][USETUP] Fix build about switch 2019-08-25 12:07:31 +09:00
Hermès Bélusca-Maïto
59acff79e5
[SETUPLIB][USETUP] Slightly modify how and when the HW system partition is detected and used.
CORE-16274

SETUPLIB:
=========

- Find the system partition initially when we create the list of
  partitions.

- Split the old CheckActiveSystemPartition() helper in two helpers:
  FindSupportedSystemPartition() and SetActivePartition(). This allows
  simplifying slightly the former one, and allows the user, in an
  interactive situation, to decide whether the "supported system
  partition" found can actually be used or not.

- Remove the "OriginalSystemPartition" hack in the PARTLIST structure.
- Add a note regarding the SystemPartition member in PARTLIST.

USETUP:
=======

- Use the introduced helpers from above. If the "system" partition we
  are going to use, in case we install ReactOS on a fixed disk, is *NOT*
  the same as the original one (e.g. because it is detected to be not
  supported by ReactOS...), display an informative screen to the user
  and let him confirm whether or not he wants to change the partition.

If we install on a fixed disk, try to find a supported system partition
on the system. Otherwise if we install on a removable disk, use the
install partition as the system partition instead.

This allows providing a fix for CORE-16274.
2019-08-25 02:38:53 +02:00
Hermès Bélusca-Maïto
626c654a10
[SETUPLIB][USETUP] Code simplifications & fixes.
SETUPLIB:
=========

- Remove useless HiddenSectors member in PARTENTRY structure.
- InsertDiskRegion() helper returns a BOOLEAN success.
- CreateInsertBlankRegion() helper sets LogicalPartition.

- Simplify the InitializePartitionEntry() helper so that its PartEntry
  parameter is clearly the one that is being initialized (i.e. converted
  from a blank region to) an actual partition, and use the helper
  CreateInsertBlankRegion(). The calculations for the StartSector and
  SectorCount are exactly equivalent with the old version of this
  function. Also make it return a BOOLEAN success instead.
  + Add some extra validation checks.
  + Adjust CreatePrimaryPartition(), CreateExtendedPartition() and
    CreateLogicalPartition() in this regard.

- Better handling of "RAW"-mounted partitions: treat them as
  "Unformatted" only if they are RAW *AND* their PartitionType is one of
  those associated with FAT file-system. Otherwise we cannot decide
  whether they are indeed unformatted or have an unknown file-system on
  them, therefore treat them as the latter.
  In this regard, the IsSupportedActivePartition() helper should not
  look for FileSystem == RAW but instead only look whether the partition
  is Unformatted.

  This should help with situations similar to the one described in CORE-16274
  where a partition with a genuine file-system but not recognized by
  ReactOS (because we currently do not have the EXT2/3/4 filesystem
  driver loaded during 1st-stage setup due to commit 5a650f6b) and
  therefore mounted as RAW, was thought to be unformatted.

USETUP:
=======
- Use the "global" SystemPartition pointer: this is the "system"
  partition we will actually use. It can be different from the actual
  one of the computer, for example when we install ReactOS on a
  removable disk. This allows also to simplify the code.

- Remove the single-used DestinationDriveLetter variable.

- Remove BuildInstallPaths() helper and use InitDestinationPaths()
  directly instead.

- Always mention the disk where the partition being formatted is.
- Cleanup old code comments, add assertions here & there...
2019-08-25 02:38:52 +02:00
Bișoc George
2fbff73792 [USETUP] Localize the rest of the hardcoded error message strings 2019-08-17 21:34:39 +02:00
Oleg Dubinskiy
6ee7cba77b [USETUP] Use "L" key instead of "D" for deleting partitions at 1st setup stage 2019-07-27 13:18:34 +02:00
Timo Kreuzer
6129fbaf1e [USETUP] Use RtlStringCbPrintfA instead of sprintf
Fixes GCC 8 warning:
base/setup/usetup/usetup.c:3407:78: error: '%S' directive writing up to 521 bytes into a region of size 200 [-Werror=format-overflow=]
                 "Setup is currently unable to check a partition formatted in %S.\n"
                                                                              ^~
base/setup/usetup/usetup.c:3406:9: note: 'sprintf' output between 128 and 649 bytes into a destination of size 260
         sprintf(Buffer,
         ^~~~~~~~~~~~~~~
                 "Setup is currently unable to check a partition formatted in %S.\n"
                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                 "\n"
                 ~~~~
                 "  \x07  Press ENTER to continue Setup.\n"
                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                 "  \x07  Press F3 to quit Setup.",
                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                 PartEntry->FileSystem);
                 ~~~~~~~~~~~~~~~~~~~~~~
2019-05-27 13:22:40 +02:00
Hermès Bélusca-Maïto
47a1acedf7
[SETUPLIB][USETUP] Improve disk HW numbering, removable disk support, and "super-floppy" partitioning.
Nowadays more and more people try to install ReactOS from removable
drives (e.g. USB sticks) onto fixed HDDs, or try to install it into
USB sticks too.

Both fixed and removable drives, as well as partitions on these, are
represented in NT using the same device name format:

  \Device\HarddiskM\PartitionN ,

with an increasing disk number M. Using this number for building the
corresponding firmware-specific ARC multi(x)disk(y)rdisk(z) path used
by the NT/ROS loader (FreeLdr, ...) is then prone to error since there
may have  been  removable drives  inserted  and  accounted for in the
calculation  of  the disk number.  These drives must be  correctly
subtracted in order to generate the correct ARC path, valid once all
the removable drives have been ejected (which should also be the
situation seen from the BIOS when booting up, except of course if you
boot on a USB stick).

This problem is now solved. Note that it matters only for the disks
that have also been enumerated by the firmware (BIOS; Int 13h). We
don't have to care about the other drives, since the ARC path will be
of a different format and will not use the disk number (instead, the
SCSI coordinates are used).

We also try to enumerate all the disks found in all the possible disk
adapters and  controllers enumerated  in the Hardware registry tree
(and that are visible by FreeLdr) in order to cover all.

Finally, we detect whether a disk reports as  a "super-floppy",  i.e.
an unpartitioned disk with a valid VBR. This is indeed how a standard
floppy disk looks like, or how USB sticks are partitioned on Windows.
Such disk is reported has having only one single partition starting at
the beginning of the disk, with partition number == 0, its type being
FAT16 non-bootable.
This allows us to forbid creating any new partitions on such disks.
Note that accessing either \Device\HarddiskN\Partition0 or Partition1
on such a disk returns the same data.
Note also that on the contrary, regular MBR-partitioned disks would
report at least four partitions entries, instead of just one.

The other improvements are:

- Do *NOT* write any MBR on a disk partitioned as "super-floppy".
  CORE-13703

- Fix the computed disk identifier, of format: %08x-%08x-%c .
  The numbers are respectively the checksum of the first sector, and
  the disk signature. The terminating letter is A or X, depending
  whether the first sector ends with 0x55AA/0xAA55 or not (see also
  commit 5053f1f5).

- Warn if the user attempts to install ReactOS on a disk that is not
  visible by the  firmware of his computer,  because it may not be
  bootable.
2019-03-12 02:17:11 +01:00
Hermès Bélusca-Maïto
84f3e2df5d
[SETUPLIB][USETUP] Remove CurrentDisk/Partition from the partlist lib code, and move these into the UI code.
- Add also some validation ASSERTs and simplify the code here and there.

- The installation partition is called "InstallPartition", while the
  global "CurrentPartition" is the disk region currently selected in
  the partition UI list, on which prtitioning operations are effectued.

- Extend CheckActiveSystemPartition() to use an optional alternative
  disk or partition in case the actual system partition (present in the
  first disk) cannot be used, e.g. because we don't support writes on it.
2019-03-11 00:05:37 +01:00
Hermès Bélusca-Maïto
a543103068
[USETUP] Improve the formatter & check-disk state machine. CORE-7749
- Find or set the active system partition only once, when we start the
  formatting stage. If the system partition is to be created in some
  non-partitioned space, we create it.

- A file-system check is always scheduled for both the system and the
  installation partitions.

- If the system partition was already formatted (which usually means
  that it already existed on the system), don't ask for formatting it.

  CORE-13205

- For each partition to be formatted, the file-system menu list is
  re-created, in order to display only the FSes that are compatible
  with the selected partition, and allow to give the user the choice
  to keep the existing file-system only if the selected partition was
  already formatted.

- Check whether the user attempts to delete the partition on which
  the installation source is present, only if it is not "new" and is
  formatted.

- Check first whether the current partition is the system partition,
  before displaying the CONFIRM_DELETE_SYSTEM_PARTITION_PAGE.
2019-03-10 15:41:25 +01:00
Hermès Bélusca-Maïto
29cc1843d0
[SETUPLIB][USETUP] Minor improvements.
- Make some partitioning functions not dependent on the selected "CurrentPartition".
- Add some sanity checks.
- Improve some of the "is-partitioned" checks.
2019-03-10 15:41:20 +01:00
Hermès Bélusca-Maïto
c1fbc2d651
[SETUPLIB][USETUP] Factor out the usage of FS provider structures.
Similarly to FMIFS this structure should be private. Instead file-system
names are passed to the helper functions, allowing to use the names
returned by the FS drivers. The names are then internally mapped to the
corresponding FS providers.

In particular this allows to handle the "RAW" file-system and to assign
the 'Unformatted' flag to partitions having this FS.

Finally this helps us refining the checks performed to see whether the
current "active" system partition uses a supported file-system.
2019-03-10 15:41:05 +01:00
Bișoc George
35f7267a97 [USETUP] Check the status value of BuildInstallPaths() (#1349) 2019-02-13 15:22:28 +01:00
Bișoc George
8bde4de2d6 [USETUP][REACTOS] Check the status return value of InitDestinationPaths() (#1264)
- Within the function's body code, check the status values returned by the called functions.
- Change the BuildInstallPaths's function type to NTSTATUS instead of VOID (and check the status of InitDestinationPaths() as well.
2019-02-10 16:43:51 +01:00
Yaroslav Kibysh
8d15720b31 [USETUP] Implement handling Home/End keys in Boot Loader Page (#1265) 2019-01-19 18:44:13 +01:00
Hermès Bélusca-Maïto
7d6cbea42d
[USETUP] Fix the strings given to the printf-like functions (addendum to a3168373). 2018-12-30 15:26:44 +01:00
Pierre Schweitzer
4ed6b1ffca
[SETUP] Add support for selecting FS type in unattended setups
By default, we still fallback to FAT if nothing asked, or if there
is an invalid input.
0 is FAT, 1 is BtrFS. This can be grown as soon as we add more IFS.
2018-12-28 20:36:47 +01:00
Hermès Bélusca-Maïto
02e4ff8eb3
[USETUP] Add SETUP_INIT_PAGE in the list of virtual pages. 2018-12-23 21:02:08 +01:00
Hermès Bélusca-Maïto
d23fa54488
[USETUP] Modify the integrated user-mode PnP manager along the lines of UMPNPMGR, so that we can wait until all the queued device installations finish before continuing the installation further.
Add a corresponding please-wait page and update the translations.
2018-12-23 20:37:14 +01:00
Hermès Bélusca-Maïto
a3168373eb
[SETUPLIB] Detect GPT-partitioned disks but don't use them since we don't support them at the moment.
- Add checks for GPT disks and either fail or ignore the disk,
  depending on the operation being executed.

[USETUP][REACTOS] Display the disk style more accurately.
2018-12-14 23:32:31 +01:00
Hermès Bélusca-Maïto
70fa2e2eb4
[SETUPLIB][USETUP] Additional partition validity checks.
Always perform the partition validity checks when creating new
primary/extended/logical partitions, and also when a new partition
is automatically created when unpartitioned space is selected for
ReactOS installation.

CORE-12246
2018-11-18 21:13:36 +01:00
Hermès Bélusca-Maïto
073c09e491
[USETUP] Display the chosen filesystem name in case of bootcode installation failure.
Simplified implementation of the proposed solution by George Bișoc
and revised by Victor Perevertkin from PR #952.

NOTE: For whatever reason ERROR_INSTALL_BOOTCODE and ERROR_WRITE_BOOT
seem to be redundant with each other. To be investigated...
2018-11-08 01:02:21 +01:00
Bișoc George
538f9d6aae [USETUP] When choosing BTRFS for the partition, don't think of it as Ext2 but just a Linux partition
Most of Linux filesystems have the MBR ID assigned as 0x83 and when the user chooses BTRFS upon partitions page wizard, we're thinking of the partition as having Ext2 filesystem which is wrong and misleading.
2018-11-07 23:16:29 +01:00
Hermès Bélusca-Maïto
f41750ab7f
[SETUPLIB][USETUP] Partition code improvements.
- SETUPLIB and USETUP: Convert PARTENTRY::DriveLetter to WCHAR.

- SETUPLIB: Retrieve volume label.

- SETUPLIB and USETUP: Move the partition types (IDs) table from
  USETUP to SETUPLIB so that they can share it with the 1st-stage
  GUI installer too. Also take the opportunity to update the table
  with information from http://www.win.tue.nl/~aeb/partitions/partition_types-1.html
  and cross-checked with the list from Paragon Hard-Disk Manager.

- USETUP: Simplify PrintPartitionData().
- Add some code comments.
2018-11-06 00:09:02 +01:00
Hermès Bélusca-Maïto
3d137b05d1
[SETUPLIB][USETUP] Move all the code that performs file copying into the SETUPLIB. 2018-11-05 23:18:47 +01:00
Hermès Bélusca-Maïto
f894631472
[SETUPLIB][USETUP] Add support for setup error handling. 2018-11-05 12:03:19 +01:00
Hermès Bélusca-Maïto
1b0c26e21c
[SETUPLIB][USETUP] Minor improvements.
- Use adequate access flag when opening symbolic links.
- Simplify the prototype of UpdateRegistry() since now both Setup INF
  handle and settings lists are inside the USETUP_DATA structure.
2018-11-01 18:55:45 +01:00
Hermès Bélusca-Maïto
13998a15c9
[USETUP] Improve SetupCommitFileQueueW() to make it compatible with its Win32 counterpart.
This means, call in the correct order the user callback with the correct
parameters (in particular the correct paths for file copy operations),
and check also for the callback returned value to know whether or not to
continue the file operations.
2018-11-01 18:55:44 +01:00
Hermès Bélusca-Maïto
8f1ab791fa
[SETUPLIB][REACTOS][USETUP] Further improve the interfacing with INF and File-Queue APIs.
This allows using some of the SetupApi.dll functions when SETUPLIB is
used in the (Win32) GUI 1st-stage installer "REACTOS", while using the
custom implemented NT-aware functions in "USETUP".
2018-11-01 18:55:43 +01:00
Hermès Bélusca-Maïto
44c101c9dc
[USETUP] Improvements for the File-queues code.
- Add support for delete and move/rename operations, which are needed
  for implementing ReactOS upgrading support.

- Use cabinet contexts.
- Use standard LIST_ENTRY structures for implementing the lists.

- Move the path-building hack code in SetupCommitFileQueueW() that had
  been introduced in r66604 (97bb83f) out of the file-queues code.

- Make the function prototypes compatible with win32's setupapi functions.
- Fix the format of the data passed to the custom notification handler.
- Adjust the file-copy callback to correctly use its arguments (setupapi-compatible).
2018-11-01 18:55:35 +01:00
Hermès Bélusca-Maïto
9169e881aa
[USETUP] Refactor the cabinet handling code to place all the global state variables into a CABINET_CONTEXT structure.
Place also all the private cabinet definitions into the .c, keeping
into the header file only the "public" structures and function prototypes.
2018-10-28 23:57:06 +01:00
Hermès Bélusca-Maïto
1a173dfdb2
[SETUPLIB][REACTOS][USETUP] Re-organize the setup state variables and some helpers.
- Move a great deal of global variables into the USETUP_DATA structure
  (the SetupInf, the SetupFileQueue, the generic lists...).

- Place the common setup initialization code into an InitializeSetup()
  routine, and the cleanup code into FinishSetup().

- Implement the setup-code part support for the TXTSETUP.SIF setup
  source path override variables "SetupSourceDevice" and "SetupSourcePath"
  (see CORE-9023); support for them in SETUPLDR will be added later.
2018-10-28 23:40:28 +01:00
Hermès Bélusca-Maïto
9c64b57dc9
[SETUPLIB][USETUP] Move the remaining (directory-creation) functions from usetup's filesup to setuplib.
They will be used later in the library.
2018-10-28 18:17:34 +01:00
Hermès Bélusca-Maïto
a972948051
[SETUPLIB][USETUP] Remove the deprecated GenericListHasSingleEntry() function and use instead GetNumberOfListEntries().
- Few FIXMEs get fixed in the process.
- Add some diagnostic ASSERTs.
2018-10-28 15:04:33 +01:00