340 lines
8.3 KiB
C
340 lines
8.3 KiB
C
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
// Copyright (C) Microsoft Corporation, 1992 - 1999
|
||
|
//
|
||
|
// File: output.h
|
||
|
//
|
||
|
// Contents: Header file for classes and function used for display
|
||
|
//
|
||
|
// History: 3-oct-2000 hiteshr Created
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
#include "gettable.h"
|
||
|
|
||
|
HRESULT LocalCopyString(LPTSTR* ppResult, LPCTSTR pString);
|
||
|
|
||
|
//+--------------------------------------------------------------------------
|
||
|
//
|
||
|
// Class: CDisplay
|
||
|
//
|
||
|
// Purpose: This class is used for displaying a column
|
||
|
//
|
||
|
// History: 3-oct-2000 hiteshr Created
|
||
|
//
|
||
|
//---------------------------------------------------------------------------
|
||
|
|
||
|
class CDisplay
|
||
|
{
|
||
|
#define MAXPAD 80
|
||
|
public:
|
||
|
|
||
|
//
|
||
|
//Initialize the Pad
|
||
|
//
|
||
|
CDisplay()
|
||
|
{
|
||
|
PadChar = L' ';
|
||
|
//Initialize the pad.
|
||
|
for( int i = 0; i < MAXPAD; ++i)
|
||
|
Pad[i] = PadChar;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
//Display width number of Pad Charachter
|
||
|
//
|
||
|
VOID DisplayPad(LONG width)
|
||
|
{
|
||
|
if(width <= 0 )
|
||
|
return;
|
||
|
if(width >= MAXPAD)
|
||
|
width = MAXPAD -1;
|
||
|
Pad[width] = 0;
|
||
|
|
||
|
WriteStandardOut(L"%s",Pad);
|
||
|
|
||
|
Pad[width] = PadChar;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
//Dispaly a column with two starting pad,
|
||
|
//column value and two ending pad
|
||
|
//
|
||
|
VOID DisplayColumn(LONG width, PCWSTR lpszValue)
|
||
|
{
|
||
|
//Display Two PadChar in the begining
|
||
|
DisplayPad(2);
|
||
|
if(lpszValue)
|
||
|
{
|
||
|
WriteStandardOut(lpszValue);
|
||
|
DisplayPad(width- static_cast<LONG>(wcslen(lpszValue)));
|
||
|
}
|
||
|
else
|
||
|
DisplayPad(width);
|
||
|
|
||
|
|
||
|
//Display Two Trailing Padchar
|
||
|
DisplayPad(2);
|
||
|
}
|
||
|
|
||
|
//
|
||
|
//Display Newline
|
||
|
//
|
||
|
VOID DisplayNewLine()
|
||
|
{
|
||
|
WriteStandardOut(L"%s",L"\n");
|
||
|
}
|
||
|
private:
|
||
|
WCHAR Pad[MAXPAD];
|
||
|
WCHAR PadChar;
|
||
|
|
||
|
};
|
||
|
|
||
|
//+--------------------------------------------------------------------------
|
||
|
//
|
||
|
// Class: CFormatInfo
|
||
|
//
|
||
|
// Purpose: Used to format table columns and display table
|
||
|
//
|
||
|
// History: 17-Oct-2000 JeffJon Created
|
||
|
//
|
||
|
//---------------------------------------------------------------------------
|
||
|
class CFormatInfo
|
||
|
{
|
||
|
public:
|
||
|
//
|
||
|
// Constructor
|
||
|
//
|
||
|
CFormatInfo();
|
||
|
|
||
|
//
|
||
|
// Destructor
|
||
|
//
|
||
|
~CFormatInfo();
|
||
|
|
||
|
|
||
|
//
|
||
|
// Public methods
|
||
|
//
|
||
|
HRESULT Initialize(DWORD dwSampleSize, bool bShowAsList = false, bool bQuiet = false);
|
||
|
|
||
|
inline DWORD GetColWidth(DWORD dwColNum)
|
||
|
{
|
||
|
ASSERT(m_bInitialized);
|
||
|
if(dwColNum >= m_dwNumColumns)
|
||
|
{
|
||
|
ASSERT(FALSE);
|
||
|
return 0;
|
||
|
}
|
||
|
return m_pColWidth[dwColNum];
|
||
|
}
|
||
|
|
||
|
inline void SetColWidth(DWORD dwColNum, DWORD dwWidth)
|
||
|
{
|
||
|
ASSERT(m_bInitialized);
|
||
|
if(dwColNum >= m_dwNumColumns)
|
||
|
{
|
||
|
ASSERT(FALSE);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if(dwWidth > m_pColWidth[dwColNum])
|
||
|
{
|
||
|
m_pColWidth[dwColNum] = dwWidth;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
HRESULT AddRow(PDSGET_DISPLAY_INFO pDisplayInfo, DWORD dwColumnCount);
|
||
|
DWORD GetRowCount() { return m_dwTotalRows; }
|
||
|
|
||
|
inline HRESULT Get(DWORD dwRow, DWORD dwCol, CComBSTR& refsbstrColValue)
|
||
|
{
|
||
|
refsbstrColValue.Empty();
|
||
|
|
||
|
ASSERT(m_bInitialized);
|
||
|
if(dwRow >= m_dwTotalRows || dwCol >= m_dwNumColumns)
|
||
|
{
|
||
|
ASSERT(FALSE);
|
||
|
return E_INVALIDARG;
|
||
|
}
|
||
|
|
||
|
refsbstrColValue += m_ppDisplayInfoArray[dwRow][dwCol].GetValue(0);
|
||
|
for (DWORD dwIdx = 1; dwIdx < m_ppDisplayInfoArray[dwRow][dwCol].GetValueCount(); dwIdx++)
|
||
|
{
|
||
|
refsbstrColValue += L";";
|
||
|
refsbstrColValue += m_ppDisplayInfoArray[dwRow][dwCol].GetValue(dwIdx);
|
||
|
}
|
||
|
|
||
|
return S_OK;
|
||
|
}
|
||
|
|
||
|
void DisplayHeaders()
|
||
|
{
|
||
|
ASSERT(m_bInitialized);
|
||
|
if (!m_bQuiet)
|
||
|
{
|
||
|
for( DWORD i = 0; i < m_dwNumColumns; ++i)
|
||
|
{
|
||
|
m_display.DisplayColumn(GetColWidth(i),m_ppDisplayInfoArray[0][i].GetDisplayName());
|
||
|
}
|
||
|
NewLine();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void DisplayColumn(DWORD dwRow, DWORD dwCol)
|
||
|
{
|
||
|
ASSERT(m_bInitialized);
|
||
|
if(dwRow >= m_dwTotalRows || dwCol >= m_dwNumColumns)
|
||
|
{
|
||
|
ASSERT(FALSE);
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
if (!m_bQuiet)
|
||
|
{
|
||
|
CComBSTR sbstrValue;
|
||
|
HRESULT hr = Get(dwRow, dwCol, sbstrValue);
|
||
|
if (SUCCEEDED(hr))
|
||
|
{
|
||
|
m_display.DisplayColumn(GetColWidth(dwCol), sbstrValue);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void DisplayColumn(DWORD dwCol, PCWSTR pszValue)
|
||
|
{
|
||
|
ASSERT(m_bInitialized);
|
||
|
if(dwCol >= m_dwNumColumns)
|
||
|
{
|
||
|
ASSERT(FALSE);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (!m_bQuiet)
|
||
|
{
|
||
|
m_display.DisplayColumn(GetColWidth(dwCol), pszValue);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void Display()
|
||
|
{
|
||
|
ASSERT(m_bInitialized);
|
||
|
|
||
|
if (!m_bListFormat && !m_bQuiet)
|
||
|
{
|
||
|
DisplayHeaders();
|
||
|
for(DWORD i = 0; i < m_dwTotalRows; ++i)
|
||
|
{
|
||
|
for(DWORD j = 0; j < m_dwNumColumns; ++j)
|
||
|
{
|
||
|
DisplayColumn(i,j);
|
||
|
}
|
||
|
NewLine();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void NewLine()
|
||
|
{
|
||
|
if (!m_bQuiet)
|
||
|
{
|
||
|
m_display.DisplayNewLine();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
|
||
|
//
|
||
|
// Private data
|
||
|
//
|
||
|
bool m_bInitialized;
|
||
|
bool m_bListFormat;
|
||
|
bool m_bQuiet;
|
||
|
|
||
|
//
|
||
|
//Number of rows to be used for calulating
|
||
|
//column width. This is also the size of the table.
|
||
|
//
|
||
|
DWORD m_dwSampleSize;
|
||
|
|
||
|
//
|
||
|
//Count of rows in cache
|
||
|
//
|
||
|
DWORD m_dwTotalRows;
|
||
|
|
||
|
//
|
||
|
//Number of columns
|
||
|
//
|
||
|
DWORD m_dwNumColumns;
|
||
|
|
||
|
//
|
||
|
// Array of column widths
|
||
|
//
|
||
|
DWORD* m_pColWidth;
|
||
|
|
||
|
//
|
||
|
// Array of column header/value pairs
|
||
|
//
|
||
|
PDSGET_DISPLAY_INFO* m_ppDisplayInfoArray;
|
||
|
|
||
|
CDisplay m_display;
|
||
|
};
|
||
|
|
||
|
//+--------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: DsGetOutputValuesList
|
||
|
//
|
||
|
// Synopsis: This function gets the values for the columns and then adds
|
||
|
// the row to the format helper
|
||
|
//
|
||
|
// Arguments: [pszDN IN] : the DN of the object
|
||
|
// [refBasePathsInfo IN] : reference to path info
|
||
|
// [refCredentialObject IN] : reference to the credential manager
|
||
|
// [pCommandArgs IN] : Command line arguments
|
||
|
// [pObjectEntry IN] : Entry in the object table being processed
|
||
|
// [pAttrInfo IN] : the values to display
|
||
|
// [dwAttrCount IN] : Number of arributes in above array
|
||
|
// [spDirObject IN] : Interface pointer to the object
|
||
|
// [refFormatInfo IN]: Reference to the format helper
|
||
|
//
|
||
|
// Returns: HRESULT : S_OK if everything succeeded
|
||
|
// E_INVALIDARG
|
||
|
//
|
||
|
// History: 16-Oct-2000 JeffJon Created
|
||
|
//
|
||
|
//---------------------------------------------------------------------------
|
||
|
|
||
|
HRESULT DsGetOutputValuesList(PCWSTR pszDN,
|
||
|
CDSCmdBasePathsInfo& refBasePathsInfo,
|
||
|
const CDSCmdCredentialObject& refCredentialObject,
|
||
|
PARG_RECORD pCommandArgs,
|
||
|
PDSGetObjectTableEntry pObjectEntry,
|
||
|
DWORD dwAttrCount,
|
||
|
PADS_ATTR_INFO pAttrInfo,
|
||
|
CComPtr<IDirectoryObject>& spDirObject,
|
||
|
CFormatInfo& refFormatInfo);
|
||
|
|
||
|
//+--------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: GetStringFromADs
|
||
|
//
|
||
|
// Synopsis: Converts Value into string depending upon type
|
||
|
// Arguments: [pValues - IN]: Value to be converted to string
|
||
|
// [dwADsType-IN]: ADSTYPE of pValue
|
||
|
// [pBuffer - OUT]:Output buffer which gets the string
|
||
|
// [dwBufferLen-IN]:Size of output buffer
|
||
|
// Returns HRESULT S_OK if Successful
|
||
|
// E_INVALIDARG
|
||
|
// Anything else is a failure code from an ADSI
|
||
|
// call
|
||
|
//
|
||
|
//
|
||
|
// History: 05-OCT-2000 hiteshr Created
|
||
|
//
|
||
|
//---------------------------------------------------------------------------
|
||
|
HRESULT GetStringFromADs(IN const ADSVALUE *pValues,
|
||
|
IN ADSTYPE dwADsType,
|
||
|
OUT LPWSTR pBuffer,
|
||
|
IN DWORD dwBufferLen);
|