update for HEAD-2003050101
[reactos.git] / subsys / system / cmd / memory.c
diff --git a/subsys/system/cmd/memory.c b/subsys/system/cmd/memory.c
new file mode 100644 (file)
index 0000000..42d1028
--- /dev/null
@@ -0,0 +1,110 @@
+/*
+ *  MEMORY.C - internal command.
+ *
+ *
+ *  History:
+ *
+ *    01-Sep-1999 (Eric Kohl)
+ *        Started.
+ */
+
+#include "config.h"
+
+#ifdef INCLUDE_CMD_MEMORY
+
+#include <windows.h>
+#include <tchar.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "cmd.h"
+
+
+/*
+ * convert
+ *
+ * insert commas into a number
+ */
+static INT
+ConvertDWord (DWORD num, LPTSTR des, INT len, BOOL bSeparator)
+{
+       TCHAR temp[32];
+       INT c = 0;
+       INT n = 0;
+
+       if (num == 0)
+       {
+               des[0] = _T('0');
+               des[1] = _T('\0');
+               n = 1;
+       }
+       else
+       {
+               temp[31] = 0;
+               while (num > 0)
+               {
+                       if (bSeparator && (((c + 1) % (nNumberGroups + 1)) == 0))
+                               temp[30 - c++] = cThousandSeparator;
+                       temp[30 - c++] = (TCHAR)(num % 10) + _T('0');
+                       num /= 10;
+               }
+
+               for (n = 0; n <= c; n++)
+                       des[n] = temp[31 - c + n];
+       }
+
+       return n;
+}
+
+
+INT CommandMemory (LPTSTR cmd, LPTSTR param)
+{
+       MEMORYSTATUS ms;
+       TCHAR szMemoryLoad[20];
+       TCHAR szTotalPhys[20];
+       TCHAR szAvailPhys[20];
+       TCHAR szTotalPageFile[20];
+       TCHAR szAvailPageFile[20];
+       TCHAR szTotalVirtual[20];
+       TCHAR szAvailVirtual[20];
+
+       if (!_tcsncmp (param, _T("/?"), 2))
+       {
+               ConOutPuts (_T("Displays the amount of system memory.\n"
+                              "\n"
+                              "MEMORY"));
+               return 0;
+       }
+
+       ms.dwLength = sizeof(MEMORYSTATUS);
+
+       GlobalMemoryStatus (&ms);
+
+       ConvertDWord (ms.dwMemoryLoad, szMemoryLoad, 20, FALSE);
+       ConvertDWord (ms.dwTotalPhys, szTotalPhys, 20, TRUE);
+       ConvertDWord (ms.dwAvailPhys, szAvailPhys, 20, TRUE);
+       ConvertDWord (ms.dwTotalPageFile, szTotalPageFile, 20, TRUE);
+       ConvertDWord (ms.dwAvailPageFile, szAvailPageFile, 20, TRUE);
+       ConvertDWord (ms.dwTotalVirtual, szTotalVirtual, 20, TRUE);
+       ConvertDWord (ms.dwAvailVirtual, szAvailVirtual, 20, TRUE);
+
+       ConOutPrintf (_T("\n"
+                        "  %12s%% memory load.\n"
+                        "\n"
+                        "  %13s bytes total physical RAM.\n"
+                        "  %13s bytes available physical RAM.\n"
+                        "\n"
+                        "  %13s bytes total page file.\n"
+                        "  %13s bytes available page file.\n"
+                        "\n"
+                        "  %13s bytes total virtual memory.\n"
+                        "  %13s bytes available virtual memory.\n"),
+                     szMemoryLoad, szTotalPhys, szAvailPhys, szTotalPageFile,
+                     szAvailPageFile, szTotalVirtual, szAvailVirtual);
+
+       return 0;
+}
+
+#endif /* INCLUDE_CMD_MEMORY */
+
+/* EOF */