summaryrefslogtreecommitdiffhomepage
path: root/public/tools/diutil/src
diff options
context:
space:
mode:
Diffstat (limited to 'public/tools/diutil/src')
-rw-r--r--public/tools/diutil/src/CommandLine.cc68
1 files changed, 68 insertions, 0 deletions
diff --git a/public/tools/diutil/src/CommandLine.cc b/public/tools/diutil/src/CommandLine.cc
new file mode 100644
index 00000000..c0388611
--- /dev/null
+++ b/public/tools/diutil/src/CommandLine.cc
@@ -0,0 +1,68 @@
+/* -------------------------------------------
+
+ 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 const SInt32 kDiskBlockCnt = 1;
+static SizeT kDiskSz = gib_cast(4);
+static const Char kOutDisk[kDIOutNameLen] = "disk.eimg";
+
+/// @brief Filesystem tool entrypoint.
+int main(int argc, char** argv)
+{
+ for (SizeT 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 = MathToNumber(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 = MathToNumber(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_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.
+ return DIFormatPartitionEPM(img);
+} \ No newline at end of file