1// gdisk.cc
2// Program modelled after Linux fdisk, but it manipulates GPT partitions
3// rather than MBR partitions.
4//
5// by Rod Smith, project began February 2009
6
7/* This program is copyright (c) 2009-2013 by Roderick W. Smith. It is distributed
8  under the terms of the GNU GPL version 2, as detailed in the COPYING file. */
9
10#include <string.h>
11#include <iostream>
12#include "gpttext.h"
13
14int main(int argc, char* argv[]) {
15   GPTDataTextUI theGPT;
16   string device = "";
17   UnicodeString uString;
18   int isError = 0;
19
20#ifndef EFI
21   cout << "GPT fdisk (gdisk) version " << GPTFDISK_VERSION << "\n\n";
22#endif /*EFI*/
23
24   if (!SizesOK())
25      exit(1);
26
27   switch (argc) {
28      case 1:
29         cout << "Type device filename, or press <Enter> to exit: ";
30         device = ReadString();
31         if (device.length() == 0)
32            exit(0);
33         else if (theGPT.LoadPartitions(device)) {
34            if (theGPT.GetState() != use_gpt)
35               WinWarning();
36            theGPT.MainMenu(device);
37         } // if/elseif
38         break;
39      case 2: // basic usage
40         if (theGPT.LoadPartitions(argv[1])) {
41            if (theGPT.GetState() != use_gpt)
42               WinWarning();
43            theGPT.MainMenu(argv[1]);
44         } // if
45         break;
46      case 3: // usage with "-l" option
47         if (strcmp(argv[1], "-l") == 0) {
48            device = (string) argv[2];
49         } else if (strcmp(argv[2], "-l") == 0) {
50            device = (string) argv[1];
51         } else { // 3 arguments, but none is "-l"
52            cerr << "Usage: " << argv[0] << " [-l] device_file\n";
53            isError = 1;
54         } // if/elseif/else
55         if (device != "") {
56            theGPT.JustLooking();
57            if (theGPT.LoadPartitions(device))
58               theGPT.DisplayGPTData();
59            else
60               isError = 1;
61         } // if
62         break;
63      default:
64         cerr << "Usage: " << argv[0] << " [-l] device_file\n";
65         isError = 1;
66         break;
67   } // switch
68   return (isError);
69} // main
70