[USETUP]
authorEric Kohl <eric.kohl@reactos.org>
Sun, 8 Jun 2014 19:05:03 +0000 (19:05 +0000)
committerEric Kohl <eric.kohl@reactos.org>
Sun, 8 Jun 2014 19:05:03 +0000 (19:05 +0000)
- Add status text for logical partition entries in the partition list.
- Add logical partition creation page dummy.

svn path=/trunk/; revision=63570

27 files changed:
reactos/base/setup/usetup/interface/usetup.c
reactos/base/setup/usetup/lang/bg-BG.h
reactos/base/setup/usetup/lang/cs-CZ.h
reactos/base/setup/usetup/lang/de-DE.h
reactos/base/setup/usetup/lang/el-GR.h
reactos/base/setup/usetup/lang/en-US.h
reactos/base/setup/usetup/lang/es-ES.h
reactos/base/setup/usetup/lang/et-EE.h
reactos/base/setup/usetup/lang/fr-FR.h
reactos/base/setup/usetup/lang/he-IL.h
reactos/base/setup/usetup/lang/it-IT.h
reactos/base/setup/usetup/lang/ja-JP.h
reactos/base/setup/usetup/lang/lt-LT.h
reactos/base/setup/usetup/lang/nl-NL.h
reactos/base/setup/usetup/lang/pl-PL.h
reactos/base/setup/usetup/lang/pt-BR.h
reactos/base/setup/usetup/lang/ro-RO.h
reactos/base/setup/usetup/lang/ru-RU.h
reactos/base/setup/usetup/lang/sk-SK.h
reactos/base/setup/usetup/lang/sq-AL.h
reactos/base/setup/usetup/lang/sv-SE.h
reactos/base/setup/usetup/lang/tr-TR.h
reactos/base/setup/usetup/lang/uk-UA.h
reactos/base/setup/usetup/mui.h
reactos/base/setup/usetup/partlist.c
reactos/base/setup/usetup/partlist.h
reactos/base/setup/usetup/usetup.h

index 7bc2564..800046a 100644 (file)
@@ -1550,18 +1550,38 @@ SelectPartitionPage(PINPUT_RECORD Ir)
     while (TRUE)
     {
         /* Update status text */
-        if (PartitionList->CurrentPartition == NULL ||
-            PartitionList->CurrentPartition->IsPartitioned == FALSE)
+        if (PartitionList->CurrentPartition == NULL)
         {
             CONSOLE_SetStatusText(MUIGetString(STRING_INSTALLCREATEPARTITION));
         }
-        else if (IsContainerPartition(PartitionList->CurrentPartition->PartitionType))
+        else if (PartitionList->CurrentPartition->LogicalPartition)
         {
-            CONSOLE_SetStatusText(MUIGetString(STRING_DELETEPARTITION));
+             if (PartitionList->CurrentPartition->IsPartitioned)
+             {
+                 CONSOLE_SetStatusText(MUIGetString(STRING_DELETEPARTITION));
+             }
+             else
+             {
+                 CONSOLE_SetStatusText(MUIGetString(STRING_INSTALLCREATELOGICAL));
+             }
         }
         else
         {
-            CONSOLE_SetStatusText(MUIGetString(STRING_INSTALLDELETEPARTITION));
+             if (PartitionList->CurrentPartition->IsPartitioned)
+             {
+                 if (IsContainerPartition(PartitionList->CurrentPartition->PartitionType))
+                 {
+                     CONSOLE_SetStatusText(MUIGetString(STRING_DELETEPARTITION));
+                 }
+                 else
+                 {
+                     CONSOLE_SetStatusText(MUIGetString(STRING_INSTALLDELETEPARTITION));
+                 }
+             }
+             else
+             {
+                 CONSOLE_SetStatusText(MUIGetString(STRING_INSTALLCREATEPARTITION));
+             }
         }
 
         CONSOLE_ConInKey(Ir);
@@ -1616,25 +1636,45 @@ SelectPartitionPage(PINPUT_RECORD Ir)
         }
         else if (Ir->Event.KeyEvent.wVirtualKeyCode == 'P')  /* P */
         {
-            Error = PrimaryPartitionCreationChecks(PartitionList);
-            if (Error != NOT_AN_ERROR)
+            if (PartitionList->CurrentPartition->LogicalPartition == FALSE)
             {
-                MUIDisplayError(Error, Ir, POPUP_WAIT_ANY_KEY);
-                return SELECT_PARTITION_PAGE;
-            }
+                Error = PrimaryPartitionCreationChecks(PartitionList);
+                if (Error != NOT_AN_ERROR)
+                {
+                    MUIDisplayError(Error, Ir, POPUP_WAIT_ANY_KEY);
+                    return SELECT_PARTITION_PAGE;
+                }
 
-            return CREATE_PRIMARY_PARTITION_PAGE;
+                return CREATE_PRIMARY_PARTITION_PAGE;
+            }
         }
         else if (Ir->Event.KeyEvent.wVirtualKeyCode == 'E')  /* E */
         {
-            Error = ExtendedPartitionCreationChecks(PartitionList);
-            if (Error != NOT_AN_ERROR)
+            if (PartitionList->CurrentPartition->LogicalPartition == FALSE)
             {
-                MUIDisplayError(Error, Ir, POPUP_WAIT_ANY_KEY);
-                return SELECT_PARTITION_PAGE;
+                Error = ExtendedPartitionCreationChecks(PartitionList);
+                if (Error != NOT_AN_ERROR)
+                {
+                    MUIDisplayError(Error, Ir, POPUP_WAIT_ANY_KEY);
+                    return SELECT_PARTITION_PAGE;
+                }
+
+                return CREATE_EXTENDED_PARTITION_PAGE;
             }
+        }
+        else if (Ir->Event.KeyEvent.wVirtualKeyCode == 'L')  /* L */
+        {
+            if (PartitionList->CurrentPartition->LogicalPartition == TRUE)
+            {
+                Error = LogicalPartitionCreationChecks(PartitionList);
+                if (Error != NOT_AN_ERROR)
+                {
+                    MUIDisplayError(Error, Ir, POPUP_WAIT_ANY_KEY);
+                    return SELECT_PARTITION_PAGE;
+                }
 
-            return CREATE_EXTENDED_PARTITION_PAGE;
+                return CREATE_LOGICAL_PARTITION_PAGE;
+            }
         }
         else if (Ir->Event.KeyEvent.wVirtualKeyCode == 'D')  /* D */
         {
@@ -2088,6 +2128,14 @@ CreateExtendedPartitionPage(PINPUT_RECORD Ir)
 }
 
 
+static PAGE_NUMBER
+CreateLogicalPartitionPage(PINPUT_RECORD Ir)
+{
+
+    return SELECT_PARTITION_PAGE;
+}
+
+
 static PAGE_NUMBER
 DeletePartitionPage(PINPUT_RECORD Ir)
 {
@@ -4029,6 +4077,10 @@ RunUSetup(VOID)
                 Page = CreateExtendedPartitionPage(&Ir);
                 break;
 
+            case CREATE_LOGICAL_PARTITION_PAGE:
+                Page = CreateLogicalPartitionPage(&Ir);
+                break;
+
             case DELETE_PARTITION_PAGE:
                 Page = DeletePartitionPage(&Ir);
                 break;
index 8e5e61f..d68f602 100644 (file)
@@ -1651,6 +1651,8 @@ MUI_STRING bgBGStrings[] =
     {STRING_INSTALLCREATEPARTITION,
      "   ENTER = Install   P = Create Primary   E = Create Extended   F3 = Quit"},
 //     "   ENTER = \91« £ ­¥   C = \91ꧤ ¢ ­¥ ­  ¤ï«   F3 = \88§å®¤"},
+    {STRING_INSTALLCREATELOGICAL,
+     "   ENTER = Install   L = Create Logical Partition   F3 = Quit"},
     {STRING_INSTALLDELETEPARTITION,
      "   ENTER = \91« £ ­¥   D = \88§âਢ ­¥ ­  ¤ï«   F3 = \88§å®¤"},
     {STRING_DELETEPARTITION,
index 319c8e0..8440fc2 100644 (file)
@@ -1647,6 +1647,8 @@ MUI_STRING csCZStrings[] =
     {STRING_INSTALLCREATEPARTITION,
      "   ENTER = Install   P = Create Primary   E = Create Extended   F3 = Quit"},
 //     "   ENTER = Instalovat   C = Vytvoýit odd¡l    F3 = Ukon\9fit"},
+    {STRING_INSTALLCREATELOGICAL,
+     "   ENTER = Install   L = Create Logical Partition   F3 = Quit"},
     {STRING_INSTALLDELETEPARTITION,
      "   ENTER = Instalovat   D = Odstranit odd¡l   F3 = Ukon\9fit"},
     {STRING_DELETEPARTITION,
index c0a2703..e85dfb9 100644 (file)
@@ -1642,6 +1642,8 @@ MUI_STRING deDEStrings[] =
      "   Bitte warten..."},
     {STRING_INSTALLCREATEPARTITION,
      "  EINGABETASTE = Installieren  P = Prim\84re  E = Erweiterte  F3 = Installation abbr."},
+    {STRING_INSTALLCREATELOGICAL,
+     "  EINGABETASTE = Installieren  L = Logisches Laufwerk  F3 = Installation abbr."},
     {STRING_INSTALLDELETEPARTITION,
      "  EINGABETASTE = Installieren  D = Partition l\94schen  F3 = Installation abbr."},
     {STRING_DELETEPARTITION,
index 790b375..d12bb69 100644 (file)
@@ -1663,6 +1663,8 @@ MUI_STRING elGRStrings[] =
     {STRING_INSTALLCREATEPARTITION,
      "   ENTER = Install   P = Create Primary   E = Create Extended   F3 = Quit"},
 //     "   ENTER = \84\9a¡\98«á©«\98©\9e   C = \83\9e£ ¦¬¨\9aå\98 Partition   F3 = \80§¦®é¨\9e©\9e"},
+    {STRING_INSTALLCREATELOGICAL,
+     "   ENTER = Install   L = Create Logical Partition   F3 = Quit"},
     {STRING_INSTALLDELETEPARTITION,
      "   ENTER = \84\9a¡\98«á©«\98©\9e   D = \83 \98\9a¨\98­ã Partition   F3 = \80§¦®é¨\9e©\9e"},
     {STRING_DELETEPARTITION,
index e9d907d..6b20c08 100644 (file)
@@ -1636,6 +1636,8 @@ MUI_STRING enUSStrings[] =
      "   Please wait..."},
     {STRING_INSTALLCREATEPARTITION,
      "   ENTER = Install   P = Create Primary   E = Create Extended   F3 = Quit"},
+    {STRING_INSTALLCREATELOGICAL,
+     "   ENTER = Install   L = Create Logical Partition   F3 = Quit"},
     {STRING_INSTALLDELETEPARTITION,
      "   ENTER = Install   D = Delete Partition   F3 = Quit"},
     {STRING_DELETEPARTITION,
index 8d6dd1d..04a53da 100644 (file)
@@ -1645,6 +1645,8 @@ MUI_STRING esESStrings[] =
     {STRING_INSTALLCREATEPARTITION,
      "   ENTER = Install   P = Create Primary   E = Create Extended   F3 = Quit"},
 //     "   ENTER = Instalar   C = Crear Partici¢n   F3 = Salir"},
+    {STRING_INSTALLCREATELOGICAL,
+     "   ENTER = Install   L = Create Logical Partition   F3 = Quit"},
     {STRING_DELETEPARTITION,
      "   D = Borrar Partici¢n   F3 = Salir"},
     {STRING_INSTALLDELETEPARTITION,
index 0866668..71fdece 100644 (file)
@@ -1636,6 +1636,8 @@ MUI_STRING etEEStrings[] =
     {STRING_INSTALLCREATEPARTITION,
      "   ENTER = Install   P = Create Primary   E = Create Extended   F3 = Quit"},
 //     "   ENTER = Paigalda  C = Loo partitsioon    F3 = V\84lju"},
+    {STRING_INSTALLCREATELOGICAL,
+     "   ENTER = Install   L = Create Logical Partition   F3 = Quit"},
     {STRING_INSTALLDELETEPARTITION,
      "   ENTER = Paigalda  D = Kustuta partitsioon  F3 = V\84lju"},
     {STRING_DELETEPARTITION,
index 379815f..84ce39a 100644 (file)
@@ -1650,6 +1650,8 @@ MUI_STRING frFRStrings[] =
      "   Veuillez patienter..."},
     {STRING_INSTALLCREATEPARTITION,
      "   ENTR\90E = Installer   P/E = Cr\82er Partition Primaire/\90tendue   F3 = Quitter"},
+    {STRING_INSTALLCREATELOGICAL,
+     "   ENTER = Install   L = Create Logical Partition   F3 = Quit"},
     {STRING_INSTALLDELETEPARTITION,
      "   ENTR\90E = Installer   D = Supprimer Partition   F3 = Quitter"},
     {STRING_DELETEPARTITION,
index 5279790..5b415a6 100644 (file)
@@ -1638,6 +1638,8 @@ MUI_STRING heILStrings[] =
     {STRING_INSTALLCREATEPARTITION,
      "   ENTER = Install   P = Create Primary   E = Create Extended   F3 = Quit"},
 //     "   ENTER = \84\9a\97\8f   C = \96\85\98 \8e\87\89\96\84   F3 = \81\88\8c \84\9a\97\90\84"},
+    {STRING_INSTALLCREATELOGICAL,
+     "   ENTER = Install   L = Create Logical Partition   F3 = Quit"},
     {STRING_INSTALLDELETEPARTITION,
      "   ENTER = \84\9a\97\8f   D = \8e\87\97 \8e\87\89\96\84   F3 = \81\88\8c \84\9a\97\90\84"},
     {STRING_DELETEPARTITION,
index bb27717..936f3b4 100644 (file)
@@ -1640,6 +1640,8 @@ MUI_STRING itITStrings[] =
     {STRING_INSTALLCREATEPARTITION,
      "   ENTER = Install   P = Create Primary   E = Create Extended   F3 = Quit"},
 //     "   INVIO = Installa   C = Crea Partizione   F3 = Esci"},
+    {STRING_INSTALLCREATELOGICAL,
+     "   ENTER = Install   L = Create Logical Partition   F3 = Quit"},
     {STRING_INSTALLDELETEPARTITION,
      "   INVIO = Installa   D = Rimuovi Partizione   F3 = Esci"},
     {STRING_DELETEPARTITION,
index d0842ba..b70ecc9 100644 (file)
@@ -1639,6 +1639,8 @@ MUI_STRING jaJPStrings[] =
     {STRING_INSTALLCREATEPARTITION,
      "   ENTER = Install   P = Create Primary   E = Create Extended   F3 = Quit"},
 //     "   ENTER = ²Ý½Ä°Ù   C = Ê߰輮ݠ»¸¾²   F3 = Á­³¼"},
+    {STRING_INSTALLCREATELOGICAL,
+     "   ENTER = Install   L = Create Logical Partition   F3 = Quit"},
     {STRING_INSTALLDELETEPARTITION,
      "   ENTER = ²Ý½Ä°Ù   D = Ê߰輮ݠ»¸¼Þ®   F3 = Á­³¼"},
     {STRING_DELETEPARTITION,
index b2bbf91..fbb759e 100644 (file)
@@ -1647,6 +1647,8 @@ MUI_STRING ltLTStrings[] =
      "   Please wait..."},
     {STRING_INSTALLCREATEPARTITION,
      "   ENTER = Install   P = Create Primary   E = Create Extended   F3 = Quit"},
+    {STRING_INSTALLCREATELOGICAL,
+     "   ENTER = Install   L = Create Logical Partition   F3 = Quit"},
     {STRING_INSTALLDELETEPARTITION,
      "   ENTER = Install   D = Delete Partition   F3 = Quit"},
     {STRING_DELETEPARTITION,
index 47ac10d..dac2f56 100644 (file)
@@ -1684,6 +1684,8 @@ MUI_STRING nlNLStrings[] =
     {STRING_INSTALLCREATEPARTITION,
      "   ENTER = Install   P = Create Primary   E = Create Extended   F3 = Quit"},
 //     "   ENTER = Installeren   C = Partitie aanmaken   F3 = Afsluiten"},
+    {STRING_INSTALLCREATELOGICAL,
+     "   ENTER = Install   L = Create Logical Partition   F3 = Quit"},
     {STRING_INSTALLDELETEPARTITION,
      "   ENTER = Installeren   D = Partitie verwijderen   F3 = Afsluiten"},
     {STRING_DELETEPARTITION,
index f03915b..a9e8c72 100644 (file)
@@ -1648,6 +1648,8 @@ MUI_STRING plPLStrings[] =
     {STRING_INSTALLCREATEPARTITION,
      "   ENTER = Install   P = Create Primary   E = Create Extended   F3 = Quit"},
 //     "   ENTER = Instalacja   C = Utworzenie Partycji   F3 = Wyj\98cie"},
+    {STRING_INSTALLCREATELOGICAL,
+     "   ENTER = Install   L = Create Logical Partition   F3 = Quit"},
     {STRING_INSTALLDELETEPARTITION,
      "   ENTER = Instalacja   D = Skasowanie Partycji   F3 = Wyj\98cie"},
     {STRING_DELETEPARTITION,
index e483986..fc8ef34 100644 (file)
@@ -1675,6 +1675,8 @@ MUI_STRING ptBRStrings[] =
     {STRING_INSTALLCREATEPARTITION,
      "   ENTER = Install   P = Create Primary   E = Create Extended   F3 = Quit"},
 //    "   ENTER=Instalar  C=Criar parti\87Æo  F3=Sair"},
+    {STRING_INSTALLCREATELOGICAL,
+     "   ENTER = Install   L = Create Logical Partition   F3 = Quit"},
     {STRING_INSTALLDELETEPARTITION,
     "   ENTER=Instalar  D=Apagar parti\87Æo  F3=Sair"},
     {STRING_DELETEPARTITION,
index ac0a0f5..d6b9425 100644 (file)
@@ -1716,6 +1716,8 @@ MUI_STRING roROStrings[] =
     {STRING_INSTALLCREATEPARTITION,
      "   ENTER = Install   P = Create Primary   E = Create Extended   F3 = Quit"},
 //     "   ENTER = Instalare   C = Creare partiîie   F3 = Ie­ire"},
+    {STRING_INSTALLCREATELOGICAL,
+     "   ENTER = Install   L = Create Logical Partition   F3 = Quit"},
     {STRING_INSTALLDELETEPARTITION,
      "   ENTER = Instalare   D = ¸tergere partiîie   F3 = Ie­ire"},
     {STRING_DELETEPARTITION,
index 4a0c38a..852c263 100644 (file)
@@ -1640,6 +1640,8 @@ MUI_STRING ruRUStrings[] =
     {STRING_INSTALLCREATEPARTITION,
      "   ENTER = Install   P = Create Primary   E = Create Extended   F3 = Quit"},
 //     "   ENTER = \93áâ ­®¢¨âì   C = \91®§¤ âì à §¤¥«   F3 = \82ë室"},
+    {STRING_INSTALLCREATELOGICAL,
+     "   ENTER = Install   L = Create Logical Partition   F3 = Quit"},
     {STRING_INSTALLDELETEPARTITION,
      "   ENTER = \93áâ ­®¢¨âì   D = \93¤ «¨âì à §¤¥«   F3 = \82ë室"},
     {STRING_DELETEPARTITION,
index 4572b00..74e2ee3 100644 (file)
@@ -1650,6 +1650,8 @@ MUI_STRING skSKStrings[] =
     {STRING_INSTALLCREATEPARTITION,
      "   ENTER = Install   P = Create Primary   E = Create Extended   F3 = Quit"},
 //     "   ENTER = Inçtalova\9c   C = Vytvori\9c oblas\9c   F3 = Skon\9fi\9c"},
+    {STRING_INSTALLCREATELOGICAL,
+     "   ENTER = Install   L = Create Logical Partition   F3 = Quit"},
     {STRING_INSTALLDELETEPARTITION,
      "   ENTER = Inçtalova\9c   D = Odstr ni\9c oblas\9c   F3 = Skon\9fi\9c"},
     {STRING_DELETEPARTITION,
index e746fb2..f23fc7c 100644 (file)
@@ -1642,6 +1642,8 @@ MUI_STRING sqALStrings[] =
     {STRING_INSTALLCREATEPARTITION,
      "   ENTER = Install   P = Create Primary   E = Create Extended   F3 = Quit"},
 //     "   ENTER = Instalo   C = Krijo Particion   F3 = Dil"},
+    {STRING_INSTALLCREATELOGICAL,
+     "   ENTER = Install   L = Create Logical Partition   F3 = Quit"},
     {STRING_INSTALLDELETEPARTITION,
      "   ENTER = Instalo   D = Fshi Particion   F3 = Dil"},
     {STRING_DELETEPARTITION,
index 7559e6c..3ee1326 100644 (file)
@@ -1645,6 +1645,8 @@ MUI_STRING svSEStrings[] =
     {STRING_INSTALLCREATEPARTITION,
      "   ENTER = Install   P = Create Primary   E = Create Extended   F3 = Quit"},
 //     "   ENTER = Installera   C = Skapa Partition   F3 = Avsluta"},
+    {STRING_INSTALLCREATELOGICAL,
+     "   ENTER = Install   L = Create Logical Partition   F3 = Quit"},
     {STRING_INSTALLDELETEPARTITION,
      "   ENTER = Installera   D = Ta bort Partition   F3 = Avsluta"},
     {STRING_DELETEPARTITION,
index bb86584..d805879 100644 (file)
@@ -1613,6 +1613,8 @@ MUI_STRING trTRStrings[] =
     {STRING_INSTALLCREATEPARTITION,
      "   ENTER = Install   P = Create Primary   E = Create Extended   F3 = Quit"},
 //    "   Giri\9f = Kur   C = B\94l\81m Olu\9ftur   F3 = \80\8dk\8d\9f"},
+    {STRING_INSTALLCREATELOGICAL,
+     "   ENTER = Install   L = Create Logical Partition   F3 = Quit"},
     {STRING_INSTALLDELETEPARTITION,
     "   Giri\9f = Kur   D = B\94l\81m\81 Sil   F3 = \80\8dk\8d\9f"},
     {STRING_DELETEPARTITION,
index 93c6877..2d538b7 100644 (file)
@@ -1645,6 +1645,8 @@ MUI_STRING ukUAStrings[] =
     {STRING_INSTALLCREATEPARTITION,
      "   ENTER = Install   P = Create Primary   E = Create Extended   F3 = Quit"},
 //     "   ENTER = \82áâ ­®¢¨â¨   C = \91⢮à¨â¨ \90®§¤i«   F3 = \82¨©â¨"},
+    {STRING_INSTALLCREATELOGICAL,
+     "   ENTER = Install   L = Create Logical Partition   F3 = Quit"},
     {STRING_INSTALLDELETEPARTITION,
      "   ENTER = \82áâ ­®¢¨â¨   D = \82¨¤ «¨â¨ \90®§¤i«   F3 = \82¨©â¨"},
     {STRING_DELETEPARTITION,
index 48092c8..f36317c 100644 (file)
@@ -99,6 +99,7 @@ MUIGetString(
 
 #define STRING_PLEASEWAIT                1
 #define STRING_INSTALLCREATEPARTITION    2
+#define STRING_INSTALLCREATELOGICAL           60
 #define STRING_INSTALLDELETEPARTITION    3
 #define STRING_DELETEPARTITION                59
 #define STRING_PARTITIONSIZE             4
index b8aad4a..d48a1bf 100644 (file)
@@ -3088,4 +3088,22 @@ ExtendedPartitionCreationChecks(
     return ERROR_SUCCESS;
 }
 
+
+ULONG
+LogicalPartitionCreationChecks(
+    IN PPARTLIST List)
+{
+//    PDISKENTRY DiskEntry;
+    PPARTENTRY PartEntry;
+
+//    DiskEntry = List->CurrentDisk;
+    PartEntry = List->CurrentPartition;
+
+    /* Fail if partition is already in use */
+    if (PartEntry->IsPartitioned == TRUE)
+        return ERROR_NEW_PARTITION;
+
+    return ERROR_SUCCESS;
+}
+
 /* EOF */
index 3423fe6..ad4765a 100644 (file)
@@ -254,4 +254,8 @@ ULONG
 ExtendedPartitionCreationChecks(
     IN PPARTLIST List);
 
+ULONG
+LogicalPartitionCreationChecks(
+    IN PPARTLIST List);
+
 /* EOF */
index 0d4f587..48914d1 100644 (file)
@@ -130,6 +130,7 @@ typedef enum _PAGE_NUMBER
     SELECT_PARTITION_PAGE,
     CREATE_PRIMARY_PARTITION_PAGE,
     CREATE_EXTENDED_PARTITION_PAGE,
+    CREATE_LOGICAL_PARTITION_PAGE,
     DELETE_PARTITION_PAGE,
 
     SELECT_FILE_SYSTEM_PAGE,