reactos操作系统实现(59)

用户安装ReactOS系统时,需要选择合适的安装目录,因为同一个类型的操作系统,可以安装多次,可以选择不同的目录来安装,以便在同一台电脑,同一个磁盘分区里安装不同的系统。如下图:

选择系统目录的实现代码如下:

#001 static PAGE_NUMBER

#002 InstallDirectoryPage(PINPUT_RECORD Ir)

#003 {

#004 PdisKENTRY diskEntry;

#005 PPARTENTRY PartEntry;

#006 WCHAR InstallDir[51];

#007 PWCHAR DefaultPath;

#008 INFCONTEXT Context;

#009 ULONG Length;

#010

判断分区列表是否存在。

#011 if (PartitionList == NULL ||

#012 PartitionList->Currentdisk == NULL ||

#013 PartitionList->CurrentPartition == NULL)

#014 {

#015 /* FIXME: show an error dialog */

#016 return QUIT_PAGE;

#017 }

#018

获取磁盘分区的入口项。

#019 diskEntry = PartitionList->Currentdisk;

#020 PartEntry = PartitionList->CurrentPartition;

#021

查找安装目录里的路径数据。

#022 /* Search for 'DefaultPath' in the 'SetupData' section */

#023 if (!SetupFindFirstLineW (SetupInf,L"SetupData",L"DefaultPath",&Context))

#024 {

#025 MUIdisplayError(ERROR_FIND_SETUPDATA,Ir,POPUP_WAIT_ENTER);

#026 return QUIT_PAGE;

#027 }

#028

读取缺省路径数据。

#029 /* Read the 'DefaultPath' data */

#030 if (INF_GetData (&Context,NULL,&DefaultPath))

#031 {

#032 wcscpy(InstallDir,DefaultPath);

#033 }

#034 else

#035 {

如果没有配置,认安装的目录,就是ReactOS目录。

#036 wcscpy(InstallDir,L"//ReactOS");

#037 }

#038

#039 Length = wcslen(InstallDir);

#040 CONSOLE_SetInputtextxY(8,11,51,InstallDir);

#041 MUIdisplayPage(INSTALL_DIRECTORY_PAGE);

#042

#043 if (IsUnattendedSetup)

#044 {

#045 return(InstallDirectoryPage1 (InstallDir,diskEntry,PartEntry));

#046 }

#047

循环地检查输入的目录。

#048 while(TRUE)

#049 {

#050 CONSOLE_ConInKey(Ir);

#051

#052 if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&

#053 (Ir->Event.KeyEvent.wVirtualKeyCode == VK_F3)) /* F3 */

#054 {

#055 if (ConfirmQuit(Ir) == TRUE)

#056 return(QUIT_PAGE);

#057

#058 break;

#059 }

#060 else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D) /* ENTER */

#061 {

这里调用函数InstallDirectoryPage1来设置安装目录。

#062 return (InstallDirectoryPage1 (InstallDir,PartEntry));

#063 }

#064 else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x08) /* BACKSPACE */

#065 {

#066 if (Length > 0)

#067 {

#068 Length--;

#069 InstallDir[Length] = 0;

#070 CONSOLE_SetInputtextxY(8,InstallDir);

#071 }

#072 }

#073 else if (isprint(Ir->Event.KeyEvent.uChar.AsciiChar))

#074 {

#075 if (Length < 50)

#076 {

#077 InstallDir[Length] = (WCHAR)Ir->Event.KeyEvent.uChar.AsciiChar;

#078 Length++;

#079 InstallDir[Length] = 0;

#080 CONSOLE_SetInputtextxY(8,InstallDir);

#081 }

#082 }

#083 }

#084

#085 return(INSTALL_DIRECTORY_PAGE);

#086 }

通过上面函数处理,如果选择合适目录,就进入下一步的页面PREPARE_copY_PAGE

相关文章

一、前言 在组件方面react和Vue一样的,核心思想玩的就是组件...
前言: 前段时间学习完react后,刚好就接到公司一个react项目...
前言: 最近收到组长通知我们项目组后面新开的项目准备统一技...
react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom...