/*
 *  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 */
