update for HEAD-2003050101
[reactos.git] / subsys / system / cmd / vol.c
diff --git a/subsys/system/cmd/vol.c b/subsys/system/cmd/vol.c
new file mode 100644 (file)
index 0000000..a37bf26
--- /dev/null
@@ -0,0 +1,113 @@
+/*
+ *  VOL.C - vol internal command.
+ *
+ *
+ *  History:
+ *
+ *    03-Dec-1998 (Eric Kohl <ekohl@abo.rhein-zeitung.de>)
+ *        Replaced DOS calls by Win32 calls.
+ *
+ *    08-Dec-1998 (Eric Kohl <ekohl@abo.rhein-zeitung.de>)
+ *        Added help text ("/?").
+ *
+ *    07-Jan-1999 (Eric Kohl <ekohl@abo.rhein-zeitung.de>)
+ *        Cleanup.
+ *
+ *    18-Jan-1999 (Eric Kohl <ekohl@abo.rhein-zeitung.de>)
+ *        Unicode ready!
+ *
+ *    20-Jan-1999 (Eric Kohl <ekohl@abo.rhein-zeitung.de>)
+ *        Redirection ready!
+ */
+
+#include "config.h"
+
+#ifdef INCLUDE_CMD_VOL
+
+#include <windows.h>
+#include <tchar.h>
+#include <string.h>
+
+#include "cmd.h"
+
+
+static INT
+PrintVolumeHeader (LPTSTR pszRootPath)
+{
+       TCHAR szVolName[80];
+       DWORD dwSerialNr;
+
+       /* get the volume information of the drive */
+       if(!GetVolumeInformation (pszRootPath,
+                                 szVolName,
+                                 80,
+                                 &dwSerialNr,
+                                 NULL,
+                                 NULL,
+                                 NULL,
+                                 0))
+       {
+               ErrorMessage (GetLastError (), _T(""));
+               return 1;
+       }
+
+       /* print drive info */
+       ConOutPrintf (_T(" Volume in drive %c:"), pszRootPath[0]);
+
+       if (szVolName[0] != '\0')
+               ConOutPrintf (_T(" is %s\n"),
+                             szVolName);
+       else
+               ConOutPrintf (_T(" has no label\n"));
+
+       /* print the volume serial number */
+       ConOutPrintf (_T(" Volume Serial Number is %04X-%04X\n"),
+                     HIWORD(dwSerialNr),
+                     LOWORD(dwSerialNr));
+       return 0;
+}
+
+
+INT cmd_vol (LPTSTR cmd, LPTSTR param)
+{
+       TCHAR szRootPath[] = _T("A:\\");
+       TCHAR szPath[MAX_PATH];
+
+       if (!_tcsncmp (param, _T("/?"), 2))
+       {
+               ConOutPuts (_T("Displays the disk volume label and serial number, if they exist.\n\n"
+                           "VOL [drive:]"));
+               return 0;
+       }
+
+       if (param[0] == _T('\0'))
+       {
+               GetCurrentDirectory (MAX_PATH, szPath);
+               szRootPath[0] = szPath[0];
+       }
+       else
+       {
+               _tcsupr (param);
+               if (param[1] == _T(':'))
+                       szRootPath[0] = param[0];
+               else
+               {
+                       error_invalid_drive ();
+                       return 1;
+               }
+       }
+
+       if (!IsValidPathName (szRootPath))
+       {
+               error_invalid_drive ();
+               return 1;
+       }
+
+       /* print the header */
+       if (!PrintVolumeHeader (szRootPath))
+               return 1;
+
+       return 0;
+}
+
+#endif