1 /* This program is copyright (c) 2009-2018 by Roderick W. Smith. It is distributed 2 under the terms of the GNU GPL version 2, as detailed in the COPYING file. */ 3 4 #include <stdint.h> 5 #include <stdlib.h> 6 #ifdef USE_UTF16 7 #include <unicode/ustream.h> 8 #else 9 #define UnicodeString string 10 #endif 11 #include <string> 12 #include "support.h" 13 #include "guid.h" 14 15 #ifndef __PARTITION_TYPES 16 #define __PARTITION_TYPES 17 18 using namespace std; 19 20 // A partition type 21 struct AType { 22 // I'm using a custom 16-bit extension of the original MBR 8-bit 23 // type codes, so as to permit disambiguation and use of new 24 // codes required by GPT 25 uint16_t MBRType; 26 GUIDData GUIDType; 27 string name; 28 int display; // 1 to show to users as available type, 0 not to 29 AType* next; 30 }; // struct AType 31 32 class PartType : public GUIDData { 33 protected: 34 static int numInstances; 35 static AType* allTypes; // Linked list holding all the data 36 static AType* lastType; // Pointer to last entry in the list 37 void AddAllTypes(void); 38 public: 39 PartType(void); 40 PartType(const PartType & orig); 41 PartType(const GUIDData & orig); 42 ~PartType(void); 43 44 // Set up type information 45 int AddType(uint16_t mbrType, const char * guidData, const char * name, int toDisplay = 1); 46 47 // New assignment operators.... 48 PartType & operator=(const string & orig); 49 PartType & operator=(const char * orig); 50 51 // Assignment operators based on base class.... 52 GUIDData & operator=(const GUIDData & orig) {return GUIDData::operator=(orig);} 53 54 // New data assignment 55 PartType & operator=(uint16_t ID); // Use MBR type code times 0x0100 to assign GUID 56 57 // Retrieve transformed GUID data based on type code matches 58 string TypeName(void) const; 59 UnicodeString UTypeName(void) const; 60 uint16_t GetHexType() const; 61 62 // Information relating to all type data 63 void ShowAllTypes(int maxLines = 21) const; 64 int Valid(uint16_t code) const; 65 }; 66 67 #endif 68