summaryrefslogtreecommitdiffhomepage
path: root/public/tools/diutil/src/CommandLine.cc
blob: 9f11e7782c3df34dbf4e4f94288e3528cc7d4ed8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/* -------------------------------------------

	Copyright (C) 2025, Amlal El Mahrouss, all rights reserved.

	FILE: CommandLine.cc
	PURPOSE: DIUTIL CLI.

   ------------------------------------------- */

#include <DiskImage.fwrk/headers/DiskImage.h>

static const Char	kDiskName[kDIDiskNameLen] = "Disk";
static SInt32		kDiskSectorSz			  = 512;
static SizeT		kDiskSz					  = gib_cast(4);
static const Char	kOutDisk[kDIOutNameLen]	  = "disk.eimg";

/// @brief Filesystem tool entrypoint.
int main(int argc, char** argv)
{
	for (SInt32 arg = 0; arg < argc; ++arg)
	{
		const Char* arg_s = argv[arg];

		if (MmCmpMemory((VoidPtr)arg_s, (VoidPtr) "--disk-output-name", MmStrLen("--disk-output-name") == 0))
		{
			if ((arg + 1) < argc)
			{
				MmCopyMemory((VoidPtr)kOutDisk, argv[arg + 1], kDIDiskNameLen);
			}
		}
		else if (MmCmpMemory((VoidPtr)arg_s, (VoidPtr) "--disk-output-size", MmStrLen("--disk-output-size") == 0))
		{
			if ((arg + 1) < argc)
			{
				kDiskSz = StrMathToNumber(argv[arg + 1], nullptr, 10);
			}
		}
		else if (MmCmpMemory((VoidPtr)arg_s, (VoidPtr) "--disk-sector-size", MmStrLen("--disk-sector-size") == 0))
		{
			if ((arg + 1) < argc)
			{
				kDiskSectorSz = StrMathToNumber(argv[arg + 1], nullptr, 10);
			}
		}
		else if (MmCmpMemory((VoidPtr)arg_s, (VoidPtr) "--disk-part-name", MmStrLen("--disk-part-name") == 0))
		{
			if ((arg + 1) < argc)
			{
				MmCopyMemory((VoidPtr)kDiskName, argv[arg + 1], kDIDiskNameLen);
			}
		}
	}

	// create disk image.

	DI::DI_DISK_IMAGE img{};

	img.disk_sz	  = kDiskSz;
	img.sector_sz = kDiskSectorSz;
	img.block_cnt = 0;

	MmCopyMemory((VoidPtr)img.disk_name, (VoidPtr)kDiskName, kDIDiskNameLen);
	MmCopyMemory((VoidPtr)img.out_name, (VoidPtr)kOutDisk, kDIDiskNameLen);

	// format disk image to explicit partition map.
	return DI::DIFormatPartitionEPM(img);
}