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