- Do only allow to install reactos on disks which are visible by the bios.
[reactos.git] / reactos / subsys / system / usetup / partlist.h
index c708416..42f9ef5 100644 (file)
@@ -16,7 +16,7 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-/* $Id: partlist.h,v 1.13 2003/08/04 15:54:05 ekohl Exp $
+/* $Id$
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS text-mode setup
  * FILE:            subsys/system/usetup/partlist.h
 #ifndef __PARTLIST_H__
 #define __PARTLIST_H__
 
+typedef enum _FORMATSTATE
+{
+  Unformatted,
+  UnformattedOrDamaged,
+  UnknownFormat,
+  Preformatted,
+  Formatted
+} FORMATSTATE, *PFORMATSTATE;
+
 
 typedef struct _PARTENTRY
 {
@@ -36,8 +45,17 @@ typedef struct _PARTENTRY
   CHAR VolumeLabel[17];
   CHAR FileSystemName[9];
 
+  /* Partition is unused disk space */
   BOOLEAN Unpartitioned;
 
+  /* Partition is new. Table does not exist on disk yet */
+  BOOLEAN New;
+
+  /* Partition was created automatically. */
+  BOOLEAN AutoCreate;
+
+  FORMATSTATE FormatState;
+
   /*
    * Raw offset and length of the unpartitioned disk space.
    * Includes the leading, not yet existing, partition table.
@@ -50,6 +68,15 @@ typedef struct _PARTENTRY
 } PARTENTRY, *PPARTENTRY;
 
 
+typedef struct _BIOSDISKENTRY
+{
+  LIST_ENTRY ListEntry;
+  ULONG DiskNumber;
+  ULONG Signature;
+  ULONG Checksum;
+} BIOSDISKENTRY, *PBIOSDISKENTRY; 
+
+
 typedef struct _DISKENTRY
 {
   LIST_ENTRY ListEntry;
@@ -63,11 +90,21 @@ typedef struct _DISKENTRY
   ULONGLONG CylinderSize;
   ULONGLONG TrackSize;
 
+  BOOLEAN BiosFound;
+  ULONG BiosDiskNumber;
+  ULONG Signature;
+  ULONG Checksum;
+
   ULONG DiskNumber;
   USHORT Port;
   USHORT Bus;
   USHORT Id;
 
+  /* Has the partition list been modified? */
+  BOOLEAN Modified;
+
+  BOOLEAN NewDisk;
+
   UNICODE_STRING DriverName;
 
   LIST_ENTRY PartListHead;
@@ -83,6 +120,7 @@ typedef struct _PARTLIST
   SHORT Bottom;
 
   SHORT Line;
+  SHORT Offset;
 
   ULONG TopDisk;
   ULONG TopPartition;
@@ -90,55 +128,88 @@ typedef struct _PARTLIST
   PDISKENTRY CurrentDisk;
   PPARTENTRY CurrentPartition;
 
-#if 0
-  /* Not used yet! */
   PDISKENTRY ActiveBootDisk;
   PPARTENTRY ActiveBootPartition;
-#endif
 
   LIST_ENTRY DiskListHead;
+  LIST_ENTRY BiosDiskListHead;
 
 } PARTLIST, *PPARTLIST;
 
+#define  PARTITION_TBL_SIZE 4
 
+#include <pshpack1.h>
+
+typedef struct _PARTITION
+{
+  unsigned char   BootFlags;                                   /* bootable?  0=no, 128=yes  */
+  unsigned char   StartingHead;                                        /* beginning head number */
+  unsigned char   StartingSector;                              /* beginning sector number */
+  unsigned char   StartingCylinder;                            /* 10 bit nmbr, with high 2 bits put in begsect */
+  unsigned char   PartitionType;                               /* Operating System type indicator code */
+  unsigned char   EndingHead;                                  /* ending head number */
+  unsigned char   EndingSector;                                        /* ending sector number */
+  unsigned char   EndingCylinder;                              /* also a 10 bit nmbr, with same high 2 bit trick */
+  unsigned int  StartingBlock;                                 /* first sector relative to start of disk */
+  unsigned int  SectorCount;                                   /* number of sectors in partition */
+} PARTITION, *PPARTITION;
+
+typedef struct _PARTITION_SECTOR
+{
+  UCHAR BootCode[440];                         /* 0x000 */
+  ULONG Signature;                             /* 0x1B8 */
+  UCHAR Reserved[2];                           /* 0x1BC */
+  PARTITION Partition[PARTITION_TBL_SIZE];     /* 0x1BE */
+  USHORT Magic;                                        /* 0x1FE */
+} PARTITION_SECTOR, *PPARTITION_SECTOR;
+
+#include <poppack.h>
+
+typedef struct
+{
+   LIST_ENTRY ListEntry;
+   ULONG DiskNumber;
+   ULONG Idendifier;
+   ULONG Signature;
+} BIOS_DISK, *PBIOS_DISK;
 
 PPARTLIST
-CreatePartitionList(SHORT Left,
-                   SHORT Top,
-                   SHORT Right,
-                   SHORT Bottom);
+CreatePartitionList (SHORT Left,
+                    SHORT Top,
+                    SHORT Right,
+                    SHORT Bottom);
 
 VOID
-DestroyPartitionList(PPARTLIST List);
+DestroyPartitionList (PPARTLIST List);
 
 VOID
-DrawPartitionList(PPARTLIST List);
+DrawPartitionList (PPARTLIST List);
 
 VOID
-ScrollDownPartitionList(PPARTLIST List);
+SelectPartition(PPARTLIST List, ULONG DiskNumber, ULONG PartitionNumber);
 
 VOID
-ScrollUpPartitionList(PPARTLIST List);
+ScrollDownPartitionList (PPARTLIST List);
 
 VOID
-GetActiveBootPartition(PPARTLIST List,
-                      PDISKENTRY *DiskEntry,
-                      PPARTENTRY *PartEntry);
+ScrollUpPartitionList (PPARTLIST List);
 
-BOOLEAN
-CreateSelectedPartition(PPARTLIST List,
-                       ULONG PartType,
-                       ULONGLONG NewPartSize);
+VOID
+CreateNewPartition (PPARTLIST List,
+                   ULONGLONG PartitionSize,
+                   BOOLEAN AutoCreate);
+
+VOID
+DeleteCurrentPartition (PPARTLIST List);
+
+VOID
+CheckActiveBootPartition (PPARTLIST List);
 
 BOOLEAN
-DeleteSelectedPartition(PPARTLIST List);
+CheckForLinuxFdiskPartitions (PPARTLIST List);
 
-#if 0
 BOOLEAN
-MarkPartitionActive(ULONG DiskNumber,
-                   ULONG PartitionNumber,
-                   PPARTDATA ActivePartition);
-#endif
+WritePartitionsToDisk (PPARTLIST List);
 
 #endif /* __PARTLIST_H__ */