// SIBOUTIL.H
//
// Copyright (c) 1997-1999 Symbian Ltd.  All rights reserved.
//

#if !defined (__SIBOUTIL_H__)
#define __SIBOUTIL_H__

#include <f32fsys.h>

//
//	Sibo numbers for p_open mode flags
//
const TUint KSiboModeMask     = 0x000f;
const TUint KSiboFormatMask   = 0x00f0;
const TUint KSiboFOpen        = 0x0000;
const TUint KSiboFCreate      = 0x0001;
const TUint KSiboFReplace     = 0x0002;
const TUint KSiboFAppend      = 0x0003;
const TUint KSiboFUnique      = 0x0004;
const TUint KSiboFSerMask     = 0x000f;
const TUint KSiboFStream      = 0x0000;
const TUint KSiboFStreamText  = 0x0010;
const TUint KSiboFText        = 0x0020;
const TUint KSiboFDir         = 0x0030;
const TUint KSiboFFormat      = 0x0040;
const TUint KSiboFDevice      = 0x0050;
const TUint KSiboFUpdate      = 0x0100;
const TUint KSiboFRandom      = 0x0200;
const TUint KSiboFShare       = 0x0400;
//
//	Sibo numbers for p_seek
//
const TInt16 KSiboFAbs         = 1;
const TInt16 KSiboFEnd         = 2;
const TInt16 KSiboFCur         = 3;
const TInt16 KSiboFRSense      = 4;
const TInt16 KSiboFRSet        = 5;
const TInt16 KSiboFRewind      = 6;
//
//	Sibo numbers for p_chdir
//
const TUint KSiboCdRoot       = 0;
const TUint KSiboCdParent     = 1;
const TUint KSiboCdSubdir     = 2;
//
//	Sibo p_parse modes
//
const TUint KSiboParseWildAny  = 0x0001;
const TUint KSiboParseWildName = 0x0002;
const TUint KSiboParseWildExt  = 0x0004;
//
//	Useful SIBO Lengths
//
const TInt KSiboSystemSize = 5;
const TInt KSiboParseStructSize = 6;
const TInt KSiboMaxFileName   = 128;
const TInt KRemoteOpenDirBuf  = 590;
const TInt KSiboFileInfoSize  = 16;
const TInt KSiboVolumeNameSize = 32;
const TInt KSiboDevNameSize    = 3;
const TInt KSiboDevInfoSize = 64;
//
//	Sibo File Attributes
//
const TUint KSiboFAttrWrite	 = 0x0001;
const TUint KSiboFAttrHidden = 0x0002;
const TUint KSiboFAttrSystem = 0x0004;
const TUint KSiboFAttrVolume = 0x0008;
const TUint KSiboFAttrDir	 = 0x0010;
const TUint KSiboFAttrMod	 = 0x0020;
const TUint KSiboFAttrRead   = 0x0100;
const TUint KSiboFAttrExec	 = 0x0200;
const TUint KSiboFAttrStream = 0x0400;
const TUint KSiboFAttrText	 = 0x0800;
//
//	SIBO Device Type Flags
//
const TUint KSiboMediaUnknown		 = 0x0000;
const TUint KSiboMediaFloppy		 = 0x0001;
const TUint KSiboMediaHardDisk		 = 0x0002;
const TUint KSiboMediaFlash			 = 0x0003;
const TUint KSiboMediaRam			 = 0x0004;
const TUint KSiboMediaRom			 = 0x0005;
const TUint KSiboMediaWriteProtected = 0x0006;
const TUint KSiboMediaCompressible	 = 0x8000;
const TUint KSiboMediaDynamic		 = 0x4000;
const TUint KSiboMediaInternal		 = 0x2000;
const TUint KSiboMediaDualDensity	 = 0x1000;
const TUint KSiboMediaFormattable	 = 0x0800;
//
//	SIBO structure versions
//
const TUint16 KSiboFileInfoVersion = 2;
const TUint16 KSiboDevInfoVersion = 3;
const TUint16 KSiboNodeInfoVersion = 2;
//
//	SIBO p_ninfo constants
//	
const TUint16 KSiboFSystypeFlat = 0;
const TUint16 KSiboFSystypeHier = 1;
const TInt KSiboNodeInfoSize = 32;
//
//	Static wrapper class for a host of useful accessories
//
class SiboUtil
    {
public:
	//
	//	File mode
	//
  	IMPORT_C static TUint16 FileModeEraToSibo(TFileOpen aType, TUint32 aMode);
    //
    //  Seek Modes
    //
    IMPORT_C static TInt16 SeekModeEraToSiboL(TSeek aMode);
    IMPORT_C static TSeek  SeekModeSiboToEraL(TInt16 aSiboMode, TInt& anOffset);
	//
	//	Error Conversion Functions
	//
    IMPORT_C static TInt16 ErrorEraToSibo(TInt anEraErr);
    IMPORT_C static TInt   ErrorSiboToEra(TInt16 aSiboErr);
	//
	//	Time handling
	//
    IMPORT_C static TUint32 TimeEraToSibo(const TTime& aTime);
	IMPORT_C static TTime   TimeSiboToEra(TUint32 aTime);
	//
	//	BufferStuffing Functions
	//
    IMPORT_C static void Put16(TUint8* aPtr, TUint16 aVal);
    IMPORT_C static void Put32(TUint8* aPtr, TUint32 aVal);
    IMPORT_C static TUint16 Get16(const TUint8* aPtr);
	IMPORT_C static TUint32 Get32(const TUint8* aPtr);
    IMPORT_C static void PutFloat(TAny* aPtr, const TReal64& aFloat);
    IMPORT_C static TReal64 GetFloat(TAny* aPtr);
	//
	//	Other Useful Functions
	//
	IMPORT_C static void OpenFileL(RFile& aFile, RFs& aServ, const TDesC& aName, TUint16 aSiboMask, TDes* aTempName=0);
    IMPORT_C static void SeekL(RFile& aFile, TInt& anOffset, TInt16 aMode);
    IMPORT_C static void ChDirL(RFs& aServ, const TDesC& aPath, TDes& aDest, TUint16 aMode, const TDesC& aSubdir);
    IMPORT_C static void GetLongPathL(RFs& aServ, const TDesC& aShortPath, TDes& aLongPath);
    IMPORT_C static void GetShortPathL(RFs& aServ, const TDesC& aLongPath, TDes& aShortPath);

    static void CheckAndAppendL(TDes& aDes, const TDesC& aAppendage);
private:
    enum TFsLookupFunc { EShortName, ELongName };
    static void GetPathL(RFs& aServ, const TDesC& aSrc, TDes& aDst, TFsLookupFunc aFunc);
    };

//
//
//
class SiboParse
    {
public:

    IMPORT_C static void Set(const TParse& aParse, TDes8& aDes);
    IMPORT_C static TUint8 EraToSiboParseFlags(const TParse& aParse);
    IMPORT_C static TInt GetWithNameAppendedL(const TDesC8& aDes, TParse& aParse);
    IMPORT_C static TInt SetWithNameAppendedL(const TParse& aParse, TDes8& aDes);
    };

//
//
//
class SiboFileInfo
	{
public:
    IMPORT_C static TUint SiboToEraFileAttr(TUint16 aAtt);
    IMPORT_C static TUint16 EraToSiboFileAttr(TUint aAtt);
    IMPORT_C static void Set(const TEntry& anEntry, TDes8& aDes);
    IMPORT_C static TInt SetWithNameAppendedL(RFs& aServ, const TEntry& anEntry, TDes8& aDes, const TDesC& aPath);
	IMPORT_C static void Get(TEntry& anEntry, const TDesC8& aDes);
    IMPORT_C static TInt GetWithNameAppended(TEntry& anEntry, const TDesC8& aDes);
    };

//
//
//
class SiboDevInfo
	{
public:
    IMPORT_C static void Get(TVolumeInfo& aVolume, const TDesC8& aDes);
	IMPORT_C static void Set(const TVolumeInfo& aVolume, TDes8& aDes);
    IMPORT_C static TUint16 EraToSiboMediaType(const TDriveInfo& aDrive);
    IMPORT_C static TUint16 EraToSiboBatteryState(TBatteryState aState);
    IMPORT_C static void SiboToEraMediaType(TDriveInfo& aDrive, TUint16 aMediaType);
    IMPORT_C static TBatteryState SiboToEraBatteryState(TUint16 aSiboBatteryState);
    };
//
//
//
class SiboNodeInfo
    {
public:
    IMPORT_C static void Set(TDes8& aDes);
    };
//
//
//
#endif
