Commit graph

124 commits

Author SHA1 Message Date
Stanislav Motylkov
bbdcc14b1c [REACTOS] Temporarily revert 0ca4e6dcfa, as requested by Hermès
The setup mistakes the unpartitioned disk as GPT.
This reverts commit 0ca4e6dcfa.
2024-11-23 23:12:02 +01:00
Hermès Bélusca-Maïto
0ca4e6dcfa
[SETUPLIB][REACTOS][USETUP] Finish unification of MBR extended and primary/logical partitions
Addendum to commmit 99f0937fd.

The partition-creation checks are unified for these partitions into one
single function. To prepare for GPT support, the specifics are put into
a separate MBRPartitionCreateChecks() helper, called for MBR disks by the
upper-level function. GPT disks will have a similar helper in the future.
2024-11-23 21:41:32 +01:00
Hermès Bélusca-Maïto
6aa11ac494
[USETUP] Deduplicate code in SelectPartitionPage() 2024-11-10 18:45:58 +01:00
Hermès Bélusca-Maïto
5066818284
[USETUP] Deduplicate code in InstallDirectoryPage() 2024-11-10 18:45:57 +01:00
Hermès Bélusca-Maïto
8bb3e5a017
[USETUP] Minor simplifications in some branching code 2024-11-10 18:45:40 +01:00
Hermès Bélusca-Maïto
b3cd576737
[SETUPLIB][USETUP] Introduce a bootloader installation helper (#7310)
CORE-13525

This is done so that the caller doesn't need to know details
about particular architecture specifics, like VBR, MBR etc.

Extra checks and specific handling is also performed for supporting
bootloader installation on removable media:
- verify whether the media is a floppy or some other removable media,
- depending on which, a suitable file system is chosen,
- and if the media is not a floppy, do the supplemental partition
  verifications to determine whether the media is a "super-floppy"
  (in the partitioning sense).
2024-10-20 16:51:25 +02:00
Timo Kreuzer
e4930be4ff [REACTOS] Use the ISO C and C++ conformant names: _wcsicmp, _stricmp
Stop using non-conforming wcsicmp, stricmp, strcasecmp
2024-10-20 14:12:25 +03:00
Hermès Bélusca-Maïto
1573461cec
[SETUP:REACTOS] Add partitioning and formatting support (#7159)
CORE-13525

- Newly-created partitions and unpartitioned space ar reinserted
  or updated in correct order in the tree-list. Volume-creation
  information data associated with the tree items is persisted
  across operations.

- Reliably delete data associated to tree-list items via the
  TVN_DELETEITEM notification.
  This allows simplifying the cleanup function; keeping simple
  the code that deletes items when deleting partitions, etc.

- Make the PrintPartitionData() function call itself recursively on
  extended partitions to display the sub-list of logical partitions.

- Handle the new partition size in MB the same way as in USETUP.

- Allow existing partitions/volumes to be re-formatted, using
  common code with the partition creation dialog.

- Allow selecting unpartitioned space or non-formatted partitions
  for installing ReactOS: unused space will automatically be
  partitioned and non-formatted partitions formatted (the user
  is prompted for choosing the file system).

- Correctly zero the progress-bar position when starting file copy.
- Add missing file copy error handler in FileCopyCallback:
  just copying what USETUP does.
2024-08-27 23:18:12 +02:00
Hermès Bélusca-Maïto
6f15802af7
[SETUPLIB][REACTOS][USETUP] Split FS-volume-specific functionality from partitions (#7258)
CORE-13525

This greatly helps in reducing code complexity in some areas: code that
previously iterated over all partitions of a given disk, just to find
which ones were partitioned and contained a valid file system, now just
have to iterate over mounted volumes.
See in particular, `lib/utils/osdetect.c` and `lib/fsutil.c` .

- Remove FORMATSTATE "Preformatted" enum value;
- Cleanup osdetect code after introducing Volume support;
- Some simplifications for FormatState.

- Differentiate between 'new' partition and 'new' volume:

  * "New" partition: it has been created and added in the cached list,
    but not yet actually written into the disk.

  * "New" volume: newly-created volume (may be backed by a partition or
    not), not yet formatted. May exist on either new, or not new partition,
    or elsewhere.

- Cache partition and volume NT device names.

  These do not change across repartitioning operations, as long as the
  partition or the filesystem volume hasn't been deleted/recreated.
  This avoids doing \Device\Harddisk%u\Partition%u sprintf's everytime
  we need to retrieve the given partition or volume device name.

  When a partition/fileysystem volume is "virtually" created (i.e. in
  the partition list, but not yet committed to disk and exposed to the
  OS), no device partition number and device name are available yet.
  In particular, validate that no manipulation of \Device\HarddiskM\Partition0
  (i.e. the whole disk) is being made.
2024-08-26 16:42:47 +02:00
Hermès Bélusca-Maïto
c9c5fd1a18
[SETUPLIB][BOOTDATA] Rename "MBRInstallType" to "BootLoaderLocation"
Less hardcoded references to "MBR" for code that should be generic
is always better.
2024-08-12 12:04:38 +02:00
Hermès Bélusca-Maïto
259abe59dc
[SETUPLIB] Fix the class of characters valid for the installation directory
Commit 7c3f4c94a4 (r68307) mentions the valid characters:
these are:
ASCII alphanumericals (a-z, A-Z, 0-9)
(hence the iswalnum() -> isalnum() change),
and: '.', '\\', '-', '_' . Spaces are not accepted.

Addendum to commit 785cc21598.
2024-08-12 12:04:37 +02:00
Hermès Bélusca-Maïto
785cc21598
[SETUPLIB][USETUP] Move IsValidPath() back into setuplib for reusability (#7186)
Reverts the IsValidPath() move done in commit 9c64b57dc.

- Turn IsValidPath() into a IsValidInstallDirectory() helper function
  available in the setuplib, so that it can also be used in the GUI setup.

- Introduce a IS_VALID_INSTALL_PATH_CHAR() macro.
2024-07-31 11:40:21 +02:00
Hermès Bélusca-Maïto
2136409fda
[USETUP] InstallDirectoryPage(): Pressing ESC erases the whole path line (#7185) 2024-07-26 22:58:02 +02:00
Hermès Bélusca-Maïto
7639cb750a
[SETUPLIB][USETUP] Reduce duplicated code
- ScrollDownPartitionList() and ScrollUpPartitionList()
  --> ScrollUpDownPartitionList()

- GetPrimaryPartitionCount() and GetLogicalPartitionCount()
  --> generic GetPartitionCount() and macros.

- GetPrevUnpartitionedEntry() and GetNextUnpartitionedEntry()
  --> GetAdjUnpartitionedEntry() ("Adj" == Adjacent)
2024-07-04 17:14:32 +02:00
Hermès Bélusca-Maïto
a7a7e6a09c
[SETUPLIB][USETUP] Isolate and decouple the filesystem operations code from the UI (#7049)
The idea is reminiscent of the SetupCommitFileQueue() function:
filesystem volume operations are "queued" and processed via a
"commit queue".

The commit queue uses a user-specified callback, that is used to
interact with the user whenever an operation (filesystem formatting,
checking) is started, ended, or fails, for example by displaying
appropriate UI screens and choices, etc.
2024-07-01 16:18:57 +02:00
Hermès Bélusca-Maïto
99f0937fd0
[SETUPLIB][USETUP] Finish unification of extended and primary/logical partitions
See commits ebcf3cf38 and c9c6902f0 (PR #5837)

In addition, correctly set the type of extended partition being used,
depending on whether it is contained below or above the 1024-cylinder
boundary (tested on NT).
2024-06-20 17:21:51 +02:00
Hermès Bélusca-Maïto
047f1c3d55
[USETUP] Exchange SetupStartPage and LanguagePage 2024-02-22 22:41:03 +01:00
Hermès Bélusca-Maïto
b7ad4a2298
[SETUPLIB][USETUP] Some cleanup for partition code.
- Make the Create*Partition helpers take a size in bytes, not in sectors.

  This allows them to be easier to use by the caller, alleviating the
  need for making the size conversion into sectors. Instead it is done
  internally by the helpers.

- Introduce helper macros to easily retrieve the size of a partition
  entry or a disk in bytes, from their internal representation in number
  of sectors.

- The 'AutoCreate' variable being USETUP-specific, remove it from the
  PARTENTRY structure and use instead a flag set into the 'New' member.

- Rename IsDiskSizeValid to IsPartitionLargeEnough, to better describe
  what the function is for.
2024-02-20 15:52:37 +01:00
Hermès Bélusca-Maïto
f0a1d766f1
[SETUPLIB][USETUP] Convert internal MUI_LAYOUTS data to numbers.
LangID is a LANGID and LayoutID is a KLID: keyboard layout ID.
See terminology at http://archives.miloush.net/michkap/archive/2004/11/27/270931.html

These tables of MUI_LAYOUTS for each language, correspond to the
intl.inf LCID map:
```
; List of locales.
; <LCID> = <Description>,<OEMCP>,<Language Group>,<langID:HKL pair>,<langID:HKL pair>,...
```
where:
- each MUI_LANGUAGE entry corresponds to one such locale description;
- each MUI_LAYOUTS entry corresponds to a <langID:HKL pair>.

See http://archives.miloush.net/michkap/archive/2006/10/14/825404.html
for some details.
2024-02-09 21:28:23 +01:00
Hermès Bélusca-Maïto
5ee1dc6113
[USETUP] Don't error out in case one tries to "delete" empty partition space.
Just... don't delete it ¯\_(ツ)_/¯
2023-11-19 16:44:34 +01:00
Serge Gautherie
780c2a0375
[SERVICES][SETUPLIB][UMANDLG][USETUP] Add missing \n to DPRINT() calls (#5983)
And promote 1 DPRINT() to DPRINT1.
2023-11-16 22:22:12 +00:00
Hermès Bélusca-Maïto
c9c6902f08
[USETUP] Further simplify partition creation UI code (#5837)
- Use the same keypress 'C' to create either primary or logical partitions.
  Their type is automatically determined, whether they are created in
  general unpartitioned space, or space within an extended partition.

- Extensively adapt the translations to reflect these changes.
2023-10-28 17:08:42 +02:00
Hermès Bélusca-Maïto
ebcf3cf38e
[USETUP] Blur the boundaries between MBR "Primary" and "Logical" partitions (#5837)
Do not do that yet for extended partitions (containers).

This is possible, because when creating partitions, we do that on
unpartitioned space that is already "tagged" as either being "logical"
or not, and the partition style is inherited from that.

The resulting code is simpler, yet working as it should.
This will also help in the future for supporting other platforms, where
the concept of "primary", "extended" and "logical" partitions do not
exist (basically all platforms except BIOS-based PC-AT).
2023-10-28 17:08:41 +02:00
Hermès Bélusca-Maïto
9ed4bf1ed7
[USETUP] Show the partition description (and its disk) being formatted and checked (#5837)
And improve some strings -- Translations need to be rechecked!
2023-10-28 17:08:40 +02:00
Hermès Bélusca-Maïto
06e4f13653
[USETUP] Simplify partition creation UI code (#5837)
Unify CREATE_{PRIMARY,EXTENDED,LOGICAL}_PARTITION_PAGE
(i.e. Create{Primary,Extended,Logical}PartitionPage() functions)
into a single CREATE_PARTITION_PAGE (i.e. CreatePartitionPage()).

A lot of code was duplicated there (display, size input, etc.) just
for calling ultimately the Create{Primary,Extended,Logical}Partition()
helper functions.

This will also help in the future for supporting other platforms, where
the concept of "primary", "extended" and "logical" partitions do not
exist (basically all platforms except BIOS-based PC-AT).
2023-10-28 17:08:39 +02:00
Hermès Bélusca-Maïto
1899a09399
[USETUP] Simplify display of partitions being formatted (#5837) 2023-10-28 17:08:39 +02:00
Hermès Bélusca-Maïto
3d4f001084
[USETUP] Rename some MUI string identifiers (#5837)
STRING_CHOOSENEWPARTITION --> STRING_CHOOSE_NEW_PARTITION
STRING_FORMATTINGDISK     --> STRING_FORMATTINGPART
STRING_HDDSIZE            --> STRING_HDPARTSIZE
STRING_HDINFOPARTCREATE_1 --> STRING_HDDISK1
STRING_HDINFOPARTDELETE_1 --> STRING_HDDISK2
STRING_HDDINFO_{1,2}      --> STRING_HDDINFO{1,2}

Move STRING_NEWPARTITION just before STRING_PARTFORMAT
and renumber the STRING_* identifiers.
2023-10-28 17:08:38 +02:00
Hermès Bélusca-Maïto
5c2ec83fa7
[USETUP] Decouple bootloader install choice page from its actual installation (#5786)
This allows to move this choice sooner in the process, thus having all
the user key presses at first, then all the actual installation going
without any key presses needed anymore... (that is, unless you wanted
to install the bootloader on a removable device. Then it will prompt
you there!)

- Additional "cosmetic"/future-proof changes: Rename all instances
  of "floppy" in the bootloader install variables to "RemovableDisk"
  because it would be great to have this install choice later.

- Layout adjustments in the translated bootloader pages.

- Skip bootloader installation on upgrades. The idea here is that if
  we were able to find a ReactOS installation to upgrade, this means
  we were able to find a valid bootloader + boot entry.
  See also PR #5633.

  This logic may be slightly improved in the future to detect whether
  the underlying bootloader is FreeLdr and if so, only update its files.
  But this is for the future.
2023-10-14 16:29:43 +02:00
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