// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
// All rights reserved.
// This component and the accompanying materials are made available
// under the terms of the License "Eclipse Public License v1.0"
// which accompanies this distribution, and is available
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
//
// Initial Contributors:
// Nokia Corporation - initial contribution.
//
// Contributors:
//
// Description:
// f32test\fsstress\t_remfsy.cpp
// 
//

#if defined(_UNICODE)
#if !defined(UNICODE)
#define UNICODE
#endif
#endif

/*
#define WIN32_LEAN_AND_MEAN
#pragma warning( disable : 4201 ) // nonstandard extension used : nameless struct/union
 #include <windows.h>
#pragma warning( default : 4201 ) // nonstandard extension used : nameless struct/union
#include <stdlib.h>
*/
#include <f32file.h>
#include <f32fsys.h>
#include <f32ver.h>
#include <e32twin.h>
#include <e32uid.h>

#include "t_remfsy.h"

const TInt KMajorVersionNumber=1;
const TInt KMinorVersionNumber=0;
//
//const TInt KKiloBytes=0x400;
//const TBuf<4> KUidName=_L(":UID");
//const TInt KUidNameLength=4;
//
//LOCAL_D TBuf8<0x1000> buf;
//LOCAL_D RConsole theConsole;


//////////////////////////////////////////////////////////////////////////
//								CRemote									//
//////////////////////////////////////////////////////////////////////////	


CRemote::CRemote()
//
// Constructor
//
	{
	__DECLARE_NAME(_S("CRemote"));
	}



TInt CRemote::Install()
//
// Install the file system.
//
	{

//	SetErrorMode(SEM_FAILCRITICALERRORS);
	RDebug::Print(_L("BASH in CRemote::Install"));
	iVersion=TVersion(KMajorVersionNumber,KMinorVersionNumber,KF32BuildVersionNumber);
    TPtrC name=_L("T_REMFSY");
	return(SetName(&name));
	}


//???JCS:  Removed all aSession parameters to get the code to compile



CMountCB* CRemote::NewMountL(/*CSessionFs* aSession*/) const
//
// Create a new mount control block.
//
	{

	return(new(ELeave) CRemoteMountCB);
	}

CFileCB* CRemote::NewFileL(/*CSessionFs* aSession*/) const
//
// Create a new file.
//
	{

	return(new(ELeave) CRemoteFileCB);
	}

CDirCB* CRemote::NewDirL(/*CSessionFs* aSession*/) const
//
// Create a new directory lister.
//
	{

	return(new(ELeave) CRemoteDirCB(/*aSession*/));
	}

CFormatCB* CRemote::NewFormatL(/*CSessionFs* aSession*/) const
//
// Create a new media formatter.
//
	{

	return(new(ELeave) CRemoteFormatCB(/*aSession*/));
	}

TInt CRemote::DefaultPath(TDes& aPath) const
//
// Return the initial default path.
//
	{

	aPath=_L("Q:\\");
	return(KErrNone);
	}


CFileSystem* CRemote::NewL()
//
//	JCS
//
	{
	CFileSystem* remoteFsy=new(ELeave) CRemote();
	return remoteFsy;
	}


void CRemote::DriveInfo(TDriveInfo& anInfo,TInt aDriveNumber) const
//
// Return the drive info iDriveAtt  && iBatteryState already set
//
	{

	TFileName d;
	d.Format(_L("%c:\\"),aDriveNumber+'A');
	if (MapDriveInfo(anInfo,aDriveNumber))
		{
		if (MapDriveAttributes(anInfo.iDriveAtt,aDriveNumber))
			{
			return;
			}
		}

//	UINT r=GetDriveType((_STRC)d.PtrZ());
	TMediaType t;
	anInfo.iMediaAtt=0;
    /*
	switch (r)
		{
	case DRIVE_REMOVABLE:
		anInfo.iMediaAtt|=KMediaAttDualDensity;
		t=EMediaFloppy;
		break;
	case DRIVE_NO_ROOT_DIR: t=EMediaNotPresent; break;
	case DRIVE_FIXED: t=EMediaHardDisk; break;
	case DRIVE_REMOTE: t=EMediaRemote; break;
	case DRIVE_CDROM: t=EMediaCdRom; break;
	case DRIVE_RAMDISK: t=EMediaRam; break;
	case DRIVE_UNKNOWN:
	default:
		t=EMediaUnknown;
		}
	*/
	t=EMediaRemote;
	anInfo.iType=t;
	}


extern "C" {

EXPORT_C CFileSystem* CreateFileSystem()
//
// Create a new file system
//
	{
	return(CRemote::NewL());
//	return(new CRemote);
	}
}


