484 lines
17 KiB
C++
484 lines
17 KiB
C++
//***************************************************************************
|
||
//
|
||
// FileName:
|
||
// $Workfile: zivabrd.h $
|
||
//
|
||
// Author:
|
||
// TOSHIBA [PCS](PSY) Seiichi Nakamura
|
||
// Copyright (c) 1997 TOSHIBA CORPORATION
|
||
//
|
||
// Description:
|
||
//
|
||
//***************************************************************************
|
||
// $Header: /DVD Drivers/ZiVA.WDM/zivabrd.h 38 99/04/21 2:46p Yagi $
|
||
// $Modtime: 99/04/21 2:21p $
|
||
// $Nokeywords:$
|
||
//***************************************************************************
|
||
// Date | Author | Description
|
||
// -----------+--------------+--------------------------------------------
|
||
// 1997.12.04 | Hideki Yagi | Add VideoProperty_FilmCamera.
|
||
// | | This Property is necessary to support WSS.
|
||
// 1998.02.19 | Hideki Yagi | Add AudioProperty_AC3OutputMode.
|
||
// | | This Property is necessary to support KARAOKE.
|
||
// 1998.03.27 | Hideki Yagi | Add GetCapability method.
|
||
// | | Add VideoProperty_SuquarePixel.
|
||
// 1998.05.01 | Hideki Yagi | Add SubpicProperty_FlushBuff.
|
||
// 1998.05.12 | Hideki Yagi | Add m_VSyncEventList.
|
||
// 1998.09.25 | Hideki Yagi | Add m_WrapperType.
|
||
// | |
|
||
//
|
||
|
||
#ifndef _ZIVA_BOARD_H_
|
||
#define _ZIVA_BOARD_H_
|
||
|
||
class CZiVA;
|
||
class CIOIF;
|
||
|
||
//***************************************************************************
|
||
// KernelService HWInt Help Class
|
||
//***************************************************************************
|
||
class CAutoHwInt
|
||
{
|
||
private:
|
||
IKernelService *m_pKernelObj;
|
||
public:
|
||
CAutoHwInt( IKernelService *pKernelObj )
|
||
{
|
||
m_pKernelObj = NULL;
|
||
ASSERT( pKernelObj != NULL );
|
||
m_pKernelObj = pKernelObj;
|
||
m_pKernelObj->DisableHwInt();
|
||
};
|
||
|
||
~CAutoHwInt( void )
|
||
{
|
||
m_pKernelObj->EnableHwInt();
|
||
};
|
||
};
|
||
|
||
//***************************************************************************
|
||
// IMBoardListItem Help Class
|
||
//***************************************************************************
|
||
class CList
|
||
{
|
||
private:
|
||
IMBoardListItem *pTopItem;
|
||
IMBoardListItem *pCurrentItem;
|
||
|
||
public:
|
||
CList( void );
|
||
void Init( void );
|
||
|
||
BOOL SearchItem( IMBoardListItem *pItem );
|
||
BOOL AddItem( IMBoardListItem *pItem );
|
||
BOOL DeleteItem( IMBoardListItem *pItem );
|
||
BOOL SetCurrentToTop( void );
|
||
IMBoardListItem *GetNext( void );
|
||
IMBoardListItem *SearchBottomItem( void );
|
||
};
|
||
|
||
//***************************************************************************
|
||
// VideoPropatySet Class
|
||
//***************************************************************************
|
||
class CVideoPropSet
|
||
{
|
||
public:
|
||
VideoProperty_TVSystem_Value m_TVSystem;
|
||
VideoProperty_AspectRatio_Value m_AspectRatio;
|
||
VideoProperty_DisplayMode_Value m_DisplayMode;
|
||
VideoSizeStruc m_Size;
|
||
VideoProperty_DigitalOut_Value m_DigitalOut;
|
||
UCHAR m_DigitalPalette[3][256];
|
||
VideoAPSStruc m_APS;
|
||
VideoProperty_ClosedCaption_Value m_ClosedCaption;
|
||
VideoProperty_OutputSource_Value m_OutputSource;
|
||
VideoProperty_CompositeOut_Value m_CompositeOut;
|
||
VideoProperty_SVideoOut_Value m_SVideoOut;
|
||
VideoProperty_SkipFieldControl_Value m_SkipFieldControl;
|
||
VideoProperty_FilmCamera_Value m_FilmCamera;
|
||
VideoProperty_SquarePixel_Value m_SquarePixel;
|
||
//by oka
|
||
VideoProperty_OSD_Switch_Value m_OSDSwitch;
|
||
|
||
public:
|
||
CVideoPropSet(){ Init(); };
|
||
|
||
void Init( void )
|
||
{
|
||
// setup default value
|
||
m_TVSystem = TV_NTSC;
|
||
m_AspectRatio = Aspect_04_03;
|
||
m_DisplayMode = Display_Original;
|
||
m_Size.ResHorizontal = 720;
|
||
m_Size.ResVertical = 480;
|
||
m_DigitalOut = DigitalOut_Off;
|
||
|
||
for( int i = 0 ; i < 3 ; i ++ )
|
||
for( int j = 0 ; j < 256; j ++ )
|
||
m_DigitalPalette[i][j] = (UCHAR)j;
|
||
|
||
m_APS.CgmsType = CgmsType_Off;
|
||
m_APS.APSType = ApsType_Off;
|
||
m_ClosedCaption = ClosedCaption_Off;
|
||
m_OutputSource = OutputSource_DVD;
|
||
m_CompositeOut = CompositeOut_Off;
|
||
m_SVideoOut = SVideoOut_Off;
|
||
m_SkipFieldControl = SkipFieldControl_Off;
|
||
m_FilmCamera = Source_Camera;
|
||
m_SquarePixel = SquarePixel_Off;
|
||
// by oka
|
||
m_OSDSwitch = Video_OSD_Off;
|
||
};
|
||
};
|
||
|
||
//***************************************************************************
|
||
// AudioPropatySet Class
|
||
//***************************************************************************
|
||
class CAudioPropSet
|
||
{
|
||
public:
|
||
AudioProperty_Type_Value m_Type;
|
||
DWORD m_StreamNo;
|
||
DWORD m_Volume;
|
||
DWORD m_Sampling;
|
||
DWORD m_ChannelNo;
|
||
DWORD m_Quant;
|
||
AudioProperty_AudioOut_Value m_OutType;
|
||
AudioProperty_Cgms_Value m_Cgms;
|
||
AudioProperty_AnalogOut_Value m_AnalogOut;
|
||
AudioProperty_DigitalOut_Value m_DigitalOut;
|
||
DWORD m_AC3DRangeLowBoost;
|
||
DWORD m_AC3DRangeHighCut;
|
||
AudioProperty_AC3OperateMode_Value m_AC3OperateMode;
|
||
AudioProperty_AC3OutputMode_Value m_AC3OutputMode;
|
||
|
||
|
||
public:
|
||
CAudioPropSet(){ Init(); };
|
||
|
||
void Init( void )
|
||
{
|
||
// setup default value
|
||
m_Type = AudioType_AC3;
|
||
m_StreamNo = 0;
|
||
m_Volume = 100;
|
||
m_Sampling = 48000;
|
||
m_ChannelNo = 2;
|
||
m_Quant = 16;
|
||
m_OutType = AudioOut_Encoded;
|
||
m_Cgms = AudioCgms_Off;
|
||
m_AnalogOut = AudioAnalogOut_On;
|
||
m_DigitalOut = AudioDigitalOut_Off;
|
||
m_AC3DRangeLowBoost = 128;
|
||
m_AC3DRangeHighCut = 128;
|
||
m_AC3OperateMode = AC3OperateLine;
|
||
};
|
||
|
||
};
|
||
|
||
//***************************************************************************
|
||
// SubpicPropatySet Class
|
||
//***************************************************************************
|
||
class CSubpicPropSet
|
||
{
|
||
public:
|
||
DWORD m_StreamNo;
|
||
UCHAR m_Palette[48];
|
||
SubpHlightStruc m_Hlight;
|
||
SubpicProperty_State_Value m_OutType;
|
||
// by oka
|
||
SubpHlightButtonStruc m_HlightButton;
|
||
|
||
public:
|
||
// setup default value
|
||
CSubpicPropSet(){ Init(); };
|
||
|
||
void Init( void )
|
||
{
|
||
m_StreamNo = 0;
|
||
for( int i = 0 ; i < 48 ; i ++ )
|
||
m_Palette[ i ] = 0;
|
||
m_Hlight.Hlight_Switch = Hlight_Off;
|
||
m_Hlight.Hlight_StartX = 0;
|
||
m_Hlight.Hlight_EndX = 0;
|
||
m_Hlight.Hlight_StartY = 0;
|
||
m_Hlight.Hlight_EndY = 0;
|
||
m_Hlight.Hlight_Color = 0;
|
||
m_Hlight.Hlight_Contrast= 0;
|
||
m_OutType = Subpic_On;
|
||
// by oka
|
||
m_HlightButton.Hlight_Button = 0;
|
||
m_HlightButton.Hlight_Action = Button_Unhighlight;
|
||
};
|
||
};
|
||
|
||
//***************************************************************************
|
||
// ZiVA Board Class
|
||
//***************************************************************************
|
||
class CMPEGBoardHAL: public IClassLibHAL, public IWrapperHAL
|
||
{
|
||
//
|
||
private:
|
||
IKernelService *m_pKernelObj; // Kernel Service Object
|
||
CIOIF ioif; // IO interface object
|
||
CZiVA ziva; // ZiVA chip control object
|
||
CADV7175A adv7175a; // ADV7175A control object
|
||
CADV7170 adv7170; // ADV7170 ccontrol object
|
||
CADV *adv; // pointer to ADV object
|
||
CMixHALStream m_Stream; // Mix Hal Stream object
|
||
|
||
#ifdef POWERCHECK_BY_FLAG
|
||
POWERSTATE m_PowerState; // Hardware power state
|
||
#endif
|
||
CList m_SendDataEventList;
|
||
CList m_StartVOBUEventList;
|
||
CList m_EndVOBEventList;
|
||
CList m_VUnderFlowEventList;
|
||
CList m_AUnderFlowEventList;
|
||
CList m_SPUnderFlowEventList;
|
||
CList m_VOverFlowEventList;
|
||
CList m_AOverFlowEventList;
|
||
CList m_SPOverFlowEventList;
|
||
// by oka
|
||
CList m_ButtonActivteEventList;
|
||
CList m_NextPictureEventList;
|
||
CList m_UserDataEventList;
|
||
// end
|
||
CList m_VSyncEventList; // 98.05.12 H.Yagi
|
||
|
||
CVideoPropSet m_VideoProp; // Video Property Set
|
||
CAudioPropSet m_AudioProp; // Audio Property Set
|
||
CSubpicPropSet m_SubpicProp; // Subpic Property Set
|
||
|
||
DWORD m_DMABufferLinearAddr; // DMA buffer addr
|
||
DWORD m_DMABufferPhysicalAddr; // DMA buffer addr
|
||
|
||
BOOL fMasterAbortFlag;
|
||
BOOL fRDYDFlag;
|
||
BOOL fENDPFlag;
|
||
BOOL fENDCFlag;
|
||
DWORD m_NaviCount;
|
||
|
||
DWORD m_EventIntMask;
|
||
// by oka
|
||
DWORD m_ZivaPbtIntMask; // stock mask for PBT_INT
|
||
DWORD m_MaskReference[24]; // interrupt bit reference counter
|
||
BOOL m_NeedPowerOnDelay; // power on delay for audio
|
||
DWORD m_PowerOnTime; // power on time.
|
||
|
||
// 1998.8.18 seichan
|
||
//DisplayMode<64><65>ZiVA<56><41>PICV<43><56><EFBFBD>荞<EFBFBD>݂Őݒ肷<DD92>邽<EFBFBD>߂̃t<CC83><74><EFBFBD>O
|
||
BOOL m_SetVideoProperty_DisplayMode_Event;
|
||
|
||
WRAPPERTYPE m_WrapperType; // WrappertType Flag
|
||
|
||
private:
|
||
void NotifyEvent( CList *pList , VOID *Ret );
|
||
void CheckZiVAInterrupt( DWORD dwIntFlag );
|
||
DWORD GetDMABufferLinearAddr( void ) { return m_DMABufferLinearAddr; };
|
||
DWORD GetDMABufferPhysicalAddr( void ) { return m_DMABufferPhysicalAddr; };
|
||
|
||
void ClearMasterAbortEvent( void );
|
||
void SetMasterAbortEvent( void );
|
||
BOOL IsMasterAbortOccurred( void );
|
||
BOOL WaitMasterAbort( void );
|
||
|
||
void ClearRDYDEvent( void );
|
||
void SetRDYDEvent( void );
|
||
BOOL IsRDYDOccurred( void );
|
||
BOOL WaitRDYD( void );
|
||
|
||
void ClearENDPEvent( void );
|
||
void SetENDPEvent( void );
|
||
BOOL IsENDPOccurred( void );
|
||
BOOL WaitENDP( void );
|
||
|
||
void ClearENDCEvent( void );
|
||
void SetENDCEvent( void );
|
||
BOOL IsENDCOccurred( void );
|
||
BOOL WaitENDC( void );
|
||
|
||
DWORD GetEventIntMask( void ){ return m_EventIntMask; };
|
||
// by oka
|
||
BOOL SetEventIntMask( DWORD mask );
|
||
BOOL UnsetEventIntMask( DWORD mask );
|
||
|
||
// by oka for Closed Caption
|
||
inline void SetUSRData( void );
|
||
inline void SendCCData( void );
|
||
DWORD m_CCData[CC_DATA_SIZE];
|
||
DWORD m_CCDataPoint;
|
||
DWORD m_CCDataNumber;
|
||
DWORD m_CCRingBufferStart;
|
||
DWORD m_CCRingBufferNumber;
|
||
DWORD m_CCstart; // User Data Area start point
|
||
DWORD m_CCend; // User Data Area end point
|
||
|
||
DWORD m_CCsend_point; //<2F><><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>o<EFBFBD>b<EFBFBD>t<EFBFBD>@<40>ł̃|<7C>C<EFBFBD><43><EFBFBD>^<5E>[
|
||
DWORD m_CCpending; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><C282>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
DWORD m_CCnumber; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>f<EFBFBD>[<5B>^<5E>̐<EFBFBD>
|
||
|
||
// by oka for OnScreenDisplay
|
||
DWORD m_OSDStartAddr;
|
||
DWORD m_OSDEndAddr;
|
||
// end
|
||
//-------------------------------------------------------------------
|
||
// Video property private functions( Set series )
|
||
//-------------------------------------------------------------------
|
||
BOOL SetVideoProperty_TVSystem( PVOID pData );
|
||
BOOL SetVideoProperty_AspectRatio( PVOID pData );
|
||
BOOL SetVideoProperty_DisplayMode( PVOID pData );
|
||
BOOL SetVideoProperty_Resolution( PVOID pData );
|
||
BOOL SetVideoProperty_DigitalOut( PVOID pData );
|
||
BOOL SetVideoProperty_DigitalPalette( PVOID pData );
|
||
BOOL SetVideoProperty_APS( PVOID pData );
|
||
BOOL SetVideoProperty_ClosedCaption( PVOID pData );
|
||
BOOL SetVideoProperty_OutputSource( PVOID pData );
|
||
BOOL SetVideoProperty_CompositeOut( PVOID pData );
|
||
BOOL SetVideoProperty_SVideoOut( PVOID pData );
|
||
BOOL SetVideoProperty_SkipFieldControl( PVOID pData );
|
||
BOOL SetVideoProperty_FilmCamera( PVOID pData );
|
||
BOOL SetVideoProperty_SquarePixel( PVOID pData );
|
||
// by oka
|
||
BOOL SetVideoProperty_Digest( PVOID pData );
|
||
BOOL SetVideoProperty_OSDData( PVOID pData );
|
||
BOOL SetVideoProperty_OSDSwitch( PVOID pData );
|
||
BOOL SetVideoProperty_Magnify( PVOID pData );
|
||
BOOL SetVideoProperty_ClosedCaptionData( PVOID pData );
|
||
|
||
//-------------------------------------------------------------------
|
||
// Video property private functions( Get series )
|
||
//-------------------------------------------------------------------
|
||
BOOL GetVideoProperty_TVSystem( PVOID pData );
|
||
BOOL GetVideoProperty_AspectRatio( PVOID pData );
|
||
BOOL GetVideoProperty_DisplayMode( PVOID pData );
|
||
BOOL GetVideoProperty_Resolution( PVOID pData );
|
||
BOOL GetVideoProperty_DigitalOut( PVOID pData );
|
||
BOOL GetVideoProperty_DigitalPalette( PVOID pData );
|
||
BOOL GetVideoProperty_APS( PVOID pData );
|
||
BOOL GetVideoProperty_ClosedCaption( PVOID pData );
|
||
BOOL GetVideoProperty_OutputSource( PVOID pData );
|
||
BOOL GetVideoProperty_CompositeOut( PVOID pData );
|
||
BOOL GetVideoProperty_SVideoOut( PVOID pData );
|
||
BOOL GetVideoProperty_SkipFieldControl( PVOID pData );
|
||
BOOL GetVideoProperty_FilmCamera( PVOID pData );
|
||
BOOL GetVideoProperty_SquarePixel( PVOID pData );
|
||
// by oka
|
||
BOOL GetVideoProperty_Digest( PVOID pData );
|
||
BOOL GetVideoProperty_OSDData( PVOID pData );
|
||
BOOL GetVideoProperty_OSDSwitch( PVOID pData );
|
||
BOOL GetVideoProperty_Magnify( PVOID pData );
|
||
BOOL GetVideoProperty_ClosedCaptionData( PVOID pData );
|
||
|
||
//-------------------------------------------------------------------
|
||
// Audio property private functions( Set series )
|
||
//-------------------------------------------------------------------
|
||
BOOL SetAudioProperty_Type( PVOID pData );
|
||
BOOL SetAudioProperty_Number( PVOID pData );
|
||
BOOL SetAudioProperty_Volume( PVOID pData );
|
||
BOOL SetAudioProperty_Sampling( PVOID pData );
|
||
BOOL SetAudioProperty_Channel( PVOID pData );
|
||
BOOL SetAudioProperty_Quant( PVOID pData );
|
||
BOOL SetAudioProperty_AudioOut( PVOID pData );
|
||
BOOL SetAudioProperty_Cgms( PVOID pData );
|
||
BOOL SetAudioProperty_AnalogOut( PVOID pData );
|
||
BOOL SetAudioProperty_DigitalOut( PVOID pData );
|
||
BOOL SetAudioProperty_AC3DRangeLowBoost( PVOID pData );
|
||
BOOL SetAudioProperty_AC3DRangeHighCut( PVOID pData );
|
||
BOOL SetAudioProperty_AC3OperateMode( PVOID pData );
|
||
BOOL SetAudioProperty_AC3OutputMode( PVOID pData );
|
||
//-------------------------------------------------------------------
|
||
// Audio property private functions( Get series )
|
||
//-------------------------------------------------------------------
|
||
BOOL GetAudioProperty_Type( PVOID pData );
|
||
BOOL GetAudioProperty_Number( PVOID pData );
|
||
BOOL GetAudioProperty_Volume( PVOID pData );
|
||
BOOL GetAudioProperty_Sampling( PVOID pData );
|
||
BOOL GetAudioProperty_Channel( PVOID pData );
|
||
BOOL GetAudioProperty_Quant( PVOID pData );
|
||
BOOL GetAudioProperty_AudioOut( PVOID pData );
|
||
BOOL GetAudioProperty_Cgms( PVOID pData );
|
||
BOOL GetAudioProperty_AnalogOut( PVOID pData );
|
||
BOOL GetAudioProperty_DigitalOut( PVOID pData );
|
||
BOOL GetAudioProperty_AC3DRangeLowBoost( PVOID pData );
|
||
BOOL GetAudioProperty_AC3DRangeHighCut( PVOID pData );
|
||
BOOL GetAudioProperty_AC3OperateMode( PVOID pData );
|
||
BOOL GetAudioProperty_AC3OutputMode( PVOID pData );
|
||
//-------------------------------------------------------------------
|
||
// Subpic property private functions( Set series )
|
||
//-------------------------------------------------------------------
|
||
BOOL SetSubpicProperty_Number( PVOID pData );
|
||
BOOL SetSubpicProperty_Palette( PVOID pData );
|
||
BOOL SetSubpicProperty_Hilight( PVOID pData );
|
||
BOOL SetSubpicProperty_State( PVOID pData );
|
||
// by oka
|
||
BOOL SetSubpicProperty_HilightButton( PVOID pData );
|
||
BOOL SetSubpicProperty_FlushBuff( PVOID pData );
|
||
|
||
//-------------------------------------------------------------------
|
||
// Subpic property private functions( Get series )
|
||
//-------------------------------------------------------------------
|
||
BOOL GetSubpicProperty_Number( PVOID pData );
|
||
BOOL GetSubpicProperty_Palette( PVOID pData );
|
||
BOOL GetSubpicProperty_Hilight( PVOID pData );
|
||
BOOL GetSubpicProperty_State( PVOID pData );
|
||
// by oka
|
||
BOOL GetSubpicProperty_HilightButton( PVOID pData );
|
||
BOOL GetSubpicProperty_FlushBuff( PVOID pData );
|
||
|
||
public:
|
||
CMPEGBoardHAL();
|
||
~CMPEGBoardHAL();
|
||
|
||
//---------------------------------------------------------------------------
|
||
// HAL interface for Wrapper
|
||
//---------------------------------------------------------------------------
|
||
HALRESULT Init( WRAPPERTYPE wraptype );
|
||
HALRESULT SetKernelService( IKernelService *pKernelService );
|
||
HALRESULT SetSinkWrapper( IMPEGBoardEvent *pMPEGBoardEvent );
|
||
HALRESULT UnsetSinkWrapper( IMPEGBoardEvent *pMPEGBoardEvent );
|
||
HALRESULT HALHwInterrupt( void );
|
||
HALRESULT QueryDMABufferSize( DWORD *Size, DWORD *BFlag );
|
||
HALRESULT SetDMABuffer( DWORD LinearAddr, DWORD physicalAddr );
|
||
// add by H.Yagi 1999.04.21
|
||
HALRESULT GetHALType( HALTYPE *HALType ){ *HALType = HalType_ZIVA; return(HAL_SUCCESS); };
|
||
|
||
|
||
//---------------------------------------------------------------------------
|
||
// HAL interface for Class Library
|
||
//---------------------------------------------------------------------------
|
||
HALRESULT GetMixHALStream( IHALStreamControl **ppHALStreamControl );
|
||
HALRESULT GetVideoHALStream( IHALStreamControl **ppHALStreamControl );
|
||
HALRESULT GetAudioHALStream( IHALStreamControl **ppHALStreamControl );
|
||
HALRESULT GetSubpicHALStream( IHALStreamControl **ppHALStreamControl );
|
||
HALRESULT SetVideoProperty( VIDEOPROPTYPE PropertyType, VOID *pData );
|
||
HALRESULT GetVideoProperty( VIDEOPROPTYPE PropertyType, VOID *pData );
|
||
HALRESULT SetAudioProperty( AUDIOPROPTYPE PropertyType, VOID *pData );
|
||
HALRESULT GetAudioProperty( AUDIOPROPTYPE PropertyType, VOID *pData );
|
||
HALRESULT SetSubpicProperty( SUBPICPROPTYPE PropertyType, VOID *pData );
|
||
HALRESULT GetSubpicProperty( SUBPICPROPTYPE PropertyType, VOID *pData );
|
||
HALRESULT SetSinkClassLib( IMPEGBoardEvent *pMPEGBoardEvent );
|
||
HALRESULT UnsetSinkClassLib( IMPEGBoardEvent *pMPEGBoardEvent );
|
||
HALRESULT SetPowerState( POWERSTATE Switch );
|
||
HALRESULT GetPowerState( POWERSTATE *pSwitch );
|
||
HALRESULT SetSTC( DWORD STCValue );
|
||
HALRESULT GetSTC( DWORD *pSTCValue );
|
||
HALRESULT GetCapability( CAPSTYPE PropType, DWORD *pPropType );
|
||
|
||
// by oka
|
||
CUserData m_UserData;
|
||
|
||
friend CMixHALStream;
|
||
};
|
||
|
||
|
||
//---------------------------------------------------------------------------
|
||
//
|
||
//---------------------------------------------------------------------------
|
||
|
||
#endif // _ZIVA_BOARD_H_
|
||
|
||
//***************************************************************************
|
||
// End of ZiVABoard class header
|
||
//***************************************************************************
|