1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/kernelhwsrv/userlibandfileserver/fileserver/sfile/sf_ops.h Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,174 @@
1.4 +// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
1.5 +// All rights reserved.
1.6 +// This component and the accompanying materials are made available
1.7 +// under the terms of the License "Eclipse Public License v1.0"
1.8 +// which accompanies this distribution, and is available
1.9 +// at the URL "http://www.eclipse.org/legal/epl-v10.html".
1.10 +//
1.11 +// Initial Contributors:
1.12 +// Nokia Corporation - initial contribution.
1.13 +//
1.14 +// Contributors:
1.15 +//
1.16 +// Description:
1.17 +// f32\sfile\sf_ops.h
1.18 +//
1.19 +//
1.20 +
1.21 +#ifndef SF_OPS_H
1.22 +#define SF_OPS_H
1.23 +
1.24 +
1.25 +#define MSG0(aType) ((TUint32)(TFsPluginRequest::aType))
1.26 +#define MSG1(aType) ((TUint32)(TFsPluginRequest::aType) << 8)
1.27 +#define MSG2(aType) ((TUint32)(TFsPluginRequest::aType) << 16)
1.28 +#define MSG3(aType) ((TUint32)(TFsPluginRequest::aType) << 24)
1.29 +
1.30 +static const TOperation OperationArray[EMaxClientOperations]=
1.31 + {/* function Flags iInitialise iPostInitialise iDoRequestL iMessageArguments*/
1.32 + { EFsAddFileSystem, ESync, &TFsAddFileSystem::Initialise, NULL, &TFsAddFileSystem::DoRequestL },
1.33 + { EFsRemoveFileSystem, ESync, &TFsRemoveFileSystem::Initialise, NULL, &TFsRemoveFileSystem::DoRequestL },
1.34 + { EFsMountFileSystem, 0, &TFsMountFileSystem::Initialise, NULL, &TFsMountFileSystem::DoRequestL },
1.35 + { EFsNotifyChange, ESync, &TFsNotifyChange::Initialise, NULL, &TFsNotifyChange::DoRequestL },
1.36 + { EFsNotifyChangeCancel, ESync, &TFsNotifyChangeCancel::Initialise, NULL, &TFsNotifyChangeCancel::DoRequestL },
1.37 + { EFsDriveList, ESync, &TFsDriveList::Initialise, NULL, &TFsDriveList::DoRequestL },
1.38 + { EFsDrive, ESync, &TFsDrive::Initialise, NULL, &TFsDrive::DoRequestL },
1.39 + { EFsVolume, 0, &TFsVolume::Initialise, NULL, &TFsVolume::DoRequestL , MSG0(EVolumeInfo)},
1.40 + { EFsSetVolume, 0, &TFsSetVolume::Initialise, NULL, &TFsSetVolume::DoRequestL },
1.41 + { EFsSubst, ESync, &TFsSubst::Initialise, NULL, &TFsSubst::DoRequestL },
1.42 + { EFsSetSubst, ESync | EParseSrc, &TFsSetSubst::Initialise, NULL, &TFsSetSubst::DoRequestL },
1.43 + { EFsRealName, ESync | EParseSrc, &TFsRealName::Initialise, NULL, &TFsRealName::DoRequestL },
1.44 + { EFsDefaultPath, ESync, &TFsDefaultPath::Initialise, NULL, &TFsDefaultPath::DoRequestL },
1.45 + { EFsSetDefaultPath, ESync, &TFsSetDefaultPath::Initialise, NULL, &TFsSetDefaultPath::DoRequestL },
1.46 + { EFsSessionPath, ESync, &TFsSessionPath::Initialise, NULL, &TFsSessionPath::DoRequestL },
1.47 + { EFsSetSessionPath, ESync, &TFsSetSessionPath::Initialise, NULL, &TFsSetSessionPath::DoRequestL },
1.48 + { EFsMkDir, EParseSrc, &TFsMkDir::Initialise, NULL, &TFsMkDir::DoRequestL , MSG0(EName) | MSG1(EMode)},
1.49 + { EFsRmDir, EParseSrc, &TFsRmDir::Initialise, NULL, &TFsRmDir::DoRequestL , MSG0(EName)},
1.50 + { EFsParse, ESync, &TFsParse::Initialise, NULL, &TFsParse::DoRequestL },
1.51 + { EFsDelete, EParseSrc, &TFsDelete::Initialise, NULL, &TFsDelete::DoRequestL , MSG0(EName)},
1.52 + { EFsRename, EParseDst | EParseSrc, &TFsRename::Initialise, NULL, &TFsRename::DoRequestL , MSG0(EName) | MSG1(ENewName)},
1.53 + { EFsReplace, EParseDst | EParseSrc, &TFsReplace::Initialise, NULL, &TFsReplace::DoRequestL , MSG0(EName) | MSG1(ENewName)},
1.54 + { EFsEntry, EParseSrc, &TFsEntry::Initialise, NULL, &TFsEntry::DoRequestL , MSG0(EName) | MSG1(EEntry)},
1.55 + { EFsSetEntry, EParseSrc, &TFsSetEntry::Initialise, NULL, &TFsSetEntry::DoRequestL , MSG0(EName) | MSG1(ETime) | MSG2(ESetAtt) | MSG3(EClearAtt)},
1.56 + { EFsGetDriveName, ESync, &TFsGetDriveName::Initialise, NULL, &TFsGetDriveName::DoRequestL },
1.57 + { EFsSetDriveName, ESync, &TFsSetDriveName::Initialise, NULL, &TFsSetDriveName::DoRequestL },
1.58 + { EFsFormatSubClose, ESync, &TFsSubClose::Initialise, NULL, &TFsSubClose::DoRequestL },
1.59 + { EFsDirSubClose, ESync, &TFsSubClose::Initialise, NULL, &TFsSubClose::DoRequestL },
1.60 + { EFsFileSubClose, EFileShare, &TFsSubClose::Initialise, NULL, &TFsSubClose::DoRequestL },
1.61 + { EFsRawSubClose, ESync, &TFsSubClose::Initialise, NULL, &TFsSubClose::DoRequestL },
1.62 + { EFsFileOpen, EParseSrc, &TFsFileOpen::Initialise, NULL, &TFsFileOpen::DoRequestL , MSG0(EName) | MSG1(EMode)},
1.63 + { EFsFileCreate, EParseSrc, &TFsFileCreate::Initialise, NULL, &TFsFileCreate::DoRequestL , MSG0(EName) | MSG1(EMode)},
1.64 + { EFsFileReplace, EParseSrc, &TFsFileReplace::Initialise, NULL, &TFsFileReplace::DoRequestL , MSG0(EName) | MSG1(EMode)},
1.65 + { EFsFileTemp, EParseSrc, &TFsFileTemp::Initialise, NULL, &TFsFileTemp::DoRequestL , MSG0(EName) | MSG1(EMode) | MSG2(ENewName)},
1.66 + { EFsFileRead, EParseSrc | EFileShare, &TFsFileRead::Initialise, &TFsFileRead::PostInitialise, &TFsFileRead::DoRequestL , MSG0(EData) | MSG1(ELength) | MSG2(EPosition) },
1.67 + { EFsFileWrite, EParseSrc | EFileShare, &TFsFileWrite::Initialise, &TFsFileWrite::PostInitialise, &TFsFileWrite::DoRequestL , MSG0(EData) | MSG1(ELength) | MSG2(EPosition) },
1.68 + { EFsFileLock, EParseSrc | EFileShare, &TFsFileLock::Initialise, NULL, &TFsFileLock::DoRequestL , MSG0(EPosition) | MSG1(ELength)},
1.69 + { EFsFileUnLock, EParseSrc | EFileShare, &TFsFileUnlock::Initialise, NULL, &TFsFileUnlock::DoRequestL , MSG0(EPosition) | MSG1(ELength)},
1.70 + { EFsFileSeek, EParseSrc | EFileShare, &TFsFileSeek::Initialise, NULL, &TFsFileSeek::DoRequestL , MSG0(EPosition) | MSG1(EMode) | MSG2(ENewPosition)},
1.71 + { EFsFileFlush, EParseSrc | EFileShare, &TFsFileFlush::Initialise, NULL, &TFsFileFlush::DoRequestL },
1.72 + { EFsFileSize, EParseSrc | EFileShare, &TFsFileSize::Initialise, NULL, &TFsFileSize::DoRequestL , MSG0(ESize)},
1.73 + { EFsFileSetSize, EParseSrc | EFileShare, &TFsFileSetSize::Initialise, NULL, &TFsFileSetSize::DoRequestL , MSG0(ESize)},
1.74 + { EFsFileAtt, EParseSrc | EFileShare, &TFsFileAtt::Initialise, NULL, &TFsFileAtt::DoRequestL , MSG0(EAtt)},
1.75 + { EFsFileSetAtt, EParseSrc | EFileShare, &TFsFileSetAtt::Initialise, NULL, &TFsFileSetAtt::DoRequestL , MSG0(ESetAtt) | MSG1(EClearAtt)},
1.76 + { EFsFileModified, EParseSrc | EFileShare, &TFsFileModified::Initialise, NULL, &TFsFileModified::DoRequestL , MSG0(ETime)},
1.77 + { EFsFileSetModified, EParseSrc | EFileShare, &TFsFileSetModified::Initialise, NULL, &TFsFileSetModified::DoRequestL , MSG0(ETime)},
1.78 + { EFsFileSet, EParseSrc | EFileShare, &TFsFileSet::Initialise, NULL, &TFsFileSet::DoRequestL , MSG0(ETime) | MSG1(ESetAtt) | MSG2(EClearAtt)},
1.79 + { EFsFileChangeMode, EParseSrc | EFileShare, &TFsFileChangeMode::Initialise, NULL, &TFsFileChangeMode::DoRequestL , MSG0(EMode)},
1.80 + { EFsFileRename, EParseDst | EParseSrc, &TFsFileRename::Initialise, NULL, &TFsFileRename::DoRequestL , MSG0(ENewName)},
1.81 + { EFsDirOpen, EParseSrc, &TFsDirOpen::Initialise, NULL, &TFsDirOpen::DoRequestL , MSG0(EName) | MSG1(EAttMask) | MSG2(EUid)},
1.82 + { EFsDirReadOne, 0, &TFsDirReadOne::Initialise, NULL, &TFsDirReadOne::DoRequestL , MSG0(EEntry)},
1.83 + { EFsDirReadPacked, 0, &TFsDirReadPacked::Initialise, NULL, &TFsDirReadPacked::DoRequestL , MSG0(EEntryArray)},
1.84 + { EFsFormatOpen, EParseSrc, &TFsFormatOpen::Initialise, NULL, &TFsFormatOpen::DoRequestL },
1.85 + { EFsFormatNext, EParseSrc, &TFsFormatNext::Initialise, NULL, &TFsFormatNext::DoRequestL },
1.86 + { EFsRawDiskOpen, 0, &TFsRawDiskOpen::Initialise, NULL, &TFsRawDiskOpen::DoRequestL },
1.87 + { EFsRawDiskRead, EParseSrc, &TFsRawDiskRead::Initialise, NULL, &TFsRawDiskRead::DoRequestL },
1.88 + { EFsRawDiskWrite, EParseSrc, &TFsRawDiskWrite::Initialise, NULL, &TFsRawDiskWrite::DoRequestL },
1.89 + { EFsResourceCountMarkStart, ESync, &TFsResourceCountMarkStart::Initialise, NULL, &TFsResourceCountMarkStart::DoRequestL },
1.90 + { EFsResourceCountMarkEnd, ESync, &TFsResourceCountMarkEnd::Initialise, NULL, &TFsResourceCountMarkEnd::DoRequestL },
1.91 + { EFsResourceCount, ESync, &TFsResourceCount::Initialise, NULL, &TFsResourceCount::DoRequestL },
1.92 + { EFsCheckDisk, EParseSrc, &TFsCheckDisk::Initialise, NULL, &TFsCheckDisk::DoRequestL },
1.93 + { EFsGetShortName, EParseSrc, &TFsGetShortName::Initialise, NULL, &TFsGetShortName::DoRequestL },
1.94 + { EFsGetLongName, EParseSrc, &TFsGetLongName::Initialise, NULL, &TFsGetLongName::DoRequestL },
1.95 + { EFsIsFileOpen, EParseSrc, &TFsIsFileOpen::Initialise, NULL, &TFsIsFileOpen::DoRequestL },
1.96 + { EFsListOpenFiles, ESync, &TFsListOpenFiles::Initialise, NULL, &TFsListOpenFiles::DoRequestL },
1.97 + { EFsGetNotifyUser, ESync, &TFsGetNotifyUser::Initialise, NULL, &TFsGetNotifyUser::DoRequestL },
1.98 + { EFsSetNotifyUser, ESync, &TFsSetNotifyUser::Initialise, NULL, &TFsSetNotifyUser::DoRequestL },
1.99 + { EFsIsFileInRom, EParseSrc, &TFsIsFileInRom::Initialise, NULL, &TFsIsFileInRom::DoRequestL },
1.100 + { EFsIsValidName, ESync, &TFsIsValidName::Initialise, NULL, &TFsIsValidName::DoRequestL },
1.101 + { EFsDebugFunction, ESync, &TFsDebugFunc::Initialise, NULL, &TFsDebugFunc::DoRequestL },
1.102 + { EFsReadFileSection, EParseSrc, &TFsReadFileSection::Initialise, NULL, &TFsReadFileSection::DoRequestL , MSG0(EData) | MSG1(EName) | MSG2(EPosition) | MSG3(ELength)},
1.103 + { EFsNotifyChangeEx, ESync | EParseSrc, &TFsNotifyChangeEx::Initialise, NULL, &TFsNotifyChangeEx::DoRequestL },
1.104 + { EFsNotifyChangeCancelEx, ESync, &TFsNotifyChangeCancelEx::Initialise, NULL, &TFsNotifyChangeCancelEx::DoRequestL },
1.105 + { EFsDismountFileSystem, 0, &TFsDismountFileSystem::Initialise, NULL, &TFsDismountFileSystem::DoRequestL },
1.106 + { EFsFileSystemName, ESync, &TFsFileSystemName::Initialise, NULL, &TFsFileSystemName::DoRequestL },
1.107 + { EFsScanDrive, EParseSrc, &TFsScanDrive::Initialise, NULL, &TFsScanDrive::DoRequestL },
1.108 + { EFsControlIo, 0, &TFsControlIo::Initialise, NULL, &TFsControlIo::DoRequestL },
1.109 + { EFsLockDrive, 0, &TFsLockDrive::Initialise, NULL, &TFsLockDrive::DoRequestL },
1.110 + { EFsUnlockDrive, 0, &TFsUnlockDrive::Initialise, NULL, &TFsUnlockDrive::DoRequestL },
1.111 + { EFsClearPassword, 0, &TFsClearPassword::Initialise, NULL, &TFsClearPassword::DoRequestL },
1.112 + { EFsNotifyDiskSpace, 0, &TFsNotifyDiskSpace::Initialise, NULL, &TFsNotifyDiskSpace::DoRequestL },
1.113 + { EFsNotifyDiskSpaceCancel, ESync, &TFsNotifyDiskSpaceCancel::Initialise, NULL, &TFsNotifyDiskSpaceCancel::DoRequestL },
1.114 + { EFsFileDrive, EParseSrc | EFileShare, &TFsFileDrive::Initialise, NULL, &TFsFileDrive::DoRequestL },
1.115 + { EFsRemountDrive, 0, &TFsRemountDrive::Initialise, NULL, &TFsRemountDrive::DoRequestL },
1.116 + { EFsMountFileSystemScan, 0, &TFsMountFileSystemScan::Initialise, NULL, &TFsMountFileSystemScan::DoRequestL },
1.117 + { EFsSessionToPrivate, ESync, &TFsSessionToPrivate::Initialise, NULL, &TFsSessionToPrivate::DoRequestL },
1.118 + { EFsPrivatePath, ESync, &TFsPrivatePath::Initialise, NULL, &TFsPrivatePath::DoRequestL },
1.119 + { EFsCreatePrivatePath, 0, &TFsCreatePrivatePath::Initialise, NULL, &TFsCreatePrivatePath::DoRequestL },
1.120 + { EFsAddExtension, ESync, &TFsAddExtension::Initialise, NULL, &TFsAddExtension::DoRequestL },
1.121 + { EFsMountExtension, 0, &TFsMountExtension::Initialise, NULL, &TFsMountExtension::DoRequestL },
1.122 + { EFsDismountExtension, 0, &TFsDismountExtension::Initialise, NULL, &TFsDismountExtension::DoRequestL },
1.123 + { EFsRemoveExtension, ESync, &TFsRemoveExtension::Initialise, NULL, &TFsRemoveExtension::DoRequestL },
1.124 + { EFsExtensionName, 0, &TFsExtensionName::Initialise, NULL, &TFsExtensionName::DoRequestL },
1.125 + { EFsStartupInitComplete, ESync, &TFsStartupInitComplete::Initialise, NULL, &TFsStartupInitComplete::DoRequestL },
1.126 + { EFsSetLocalDriveMapping, ESync, &TFsSetLocalDriveMapping::Initialise, NULL, &TFsSetLocalDriveMapping::DoRequestL },
1.127 + { EFsFinaliseDrive, 0, &TFsFinaliseDrive::Initialise, NULL, &TFsFinaliseDrive::DoRequestL },
1.128 + { EFsFileDuplicate, 0 | EFileShare, &TFsFileDuplicate::Initialise, NULL, &TFsFileDuplicate::DoRequestL }, // Not done
1.129 + { EFsFileAdopt, ESync, &TFsFileAdopt::Initialise, NULL, &TFsFileAdopt::DoRequestL }, // Not done
1.130 + { EFsSwapFileSystem, ESync, &TFsSwapFileSystem::Initialise, NULL, &TFsSwapFileSystem::DoRequestL },
1.131 + { EFsErasePassword, 0, &TFsErasePassword::Initialise, NULL, &TFsErasePassword::DoRequestL },
1.132 + { EFsReserveDriveSpace, 0, &TFsReserveDriveSpace::Initialise, NULL, &TFsReserveDriveSpace::DoRequestL },
1.133 + { EFsGetReserveAccess, ESync, &TFsGetReserveAccess::Initialise, NULL, &TFsGetReserveAccess::DoRequestL },
1.134 + { EFsReleaseReserveAccess, ESync, &TFsReleaseReserveAccess::Initialise, NULL, &TFsReleaseReserveAccess::DoRequestL },
1.135 + { EFsFileName, ESync, &TFsFileName::Initialise, NULL, &TFsFileName::DoRequestL , MSG0(EName)},
1.136 + { EFsGetMediaSerialNumber, 0, &TFsGetMediaSerialNumber::Initialise, NULL, &TFsGetMediaSerialNumber::DoRequestL },
1.137 + { EFsFileFullName, ESync, &TFsFileFullName::Initialise, NULL, &TFsFileFullName::DoRequestL , MSG0(EName)}, // Wasn't in original list?
1.138 + { EFsAddPlugin, ESync, &TFsAddPlugin::Initialise, NULL, &TFsAddPlugin::DoRequestL },
1.139 + { EFsRemovePlugin, ESync, &TFsRemovePlugin::Initialise, NULL, &TFsRemovePlugin::DoRequestL },
1.140 + { EFsMountPlugin, ESync, &TFsMountPlugin::Initialise, NULL, &TFsMountPlugin::DoRequestL },
1.141 + { EFsDismountPlugin, 0, &TFsDismountPlugin::Initialise, NULL, &TFsDismountPlugin::DoRequestL },
1.142 + { EFsPluginName, ESync, &TFsPluginName::Initialise, NULL, &TFsPluginName::DoRequestL },
1.143 + { EFsPluginOpen, ESync | EParseSrc, &TFsPluginOpen::Initialise, NULL, &TFsPluginOpen::DoRequestL },
1.144 + { EFsPluginSubClose, ESync, &TFsSubClose::Initialise, NULL, &TFsSubClose::DoRequestL },
1.145 + { EFsPluginDoRequest, 0, &TFsPluginDoRequest::Initialise, NULL, &TFsPluginDoRequest::DoRequestL },
1.146 + { EFsPluginDoControl, 0, &TFsPluginDoControl::Initialise, NULL, &TFsPluginDoControl::DoRequestL },
1.147 + { EFsPluginDoCancel, 0, &TFsPluginDoCancel::Initialise, NULL, &TFsPluginDoCancel::DoRequestL },
1.148 + { EFsNotifyDismount, 0, &TFsNotifyDismount::Initialise, NULL, &TFsNotifyDismount::DoRequestL },
1.149 + { EFsNotifyDismountCancel, ESync, &TFsNotifyDismountCancel::Initialise, NULL, &TFsNotifyDismountCancel::DoRequestL },
1.150 + { EFsAllowDismount, 0, &TFsAllowDismount::Initialise, NULL, &TFsAllowDismount::DoRequestL },
1.151 + { EFsSetStartupConfiguration, ESync, &TFsSetStartupConfiguration::Initialise, NULL, &TFsSetStartupConfiguration::DoRequestL },
1.152 + { EFsFileReadCancel, ESync, &TFsFileReadCancel::Initialise, NULL, &TFsFileReadCancel::DoRequestL },
1.153 + { EFsAddCompositeMount, ESync, &TFsAddCompositeMount::Initialise, NULL, &TFsAddCompositeMount::DoRequestL },
1.154 + { EFsSetSessionFlags, ESync, &TFsSetSessionFlags::Initialise, NULL, &TFsSetSessionFlags::DoRequestL },
1.155 + { EFsSetSystemDrive, ESync, &TFsSetSystemDrive::Initialise, NULL, &TFsSetSystemDrive::DoRequestL },
1.156 + { EFsBlockMap, EParseSrc, &TFsBlockMap::Initialise, NULL, &TFsBlockMap::DoRequestL },
1.157 + { EFsUnclamp, 0, &TFsUnclamp::Initialise, NULL, &TFsUnclamp::DoRequestL },
1.158 + { EFsFileClamp, EParseSrc, &TFsFileClamp::Initialise, NULL, &TFsFileClamp::DoRequestL },
1.159 + { EFsQueryVolumeInfoExt, 0, &TFsQueryVolumeInfoExt::Initialise, NULL, &TFsQueryVolumeInfoExt::DoRequestL },
1.160 + { EFsInitialisePropertiesFile,0, &TFsInitialisePropertiesFile::Initialise, NULL, &TFsInitialisePropertiesFile::DoRequestL },
1.161 + { EFsFileWriteDirty, EFileShare, NULL, &TFsFileWriteDirty::PostInitialise, &TFsFileWrite::DoRequestL },
1.162 + { EFsSynchroniseDriveThread, 0, &TFsSynchroniseDriveThread::Initialise, NULL, &TFsSynchroniseDriveThread::DoRequestL },
1.163 + { EFsAddProxyDrive, ESync, &TFsAddProxyDrive::Initialise, NULL, &TFsAddProxyDrive::DoRequestL },
1.164 + { EFsRemoveProxyDrive, ESync, &TFsRemoveProxyDrive::Initialise, NULL, &TFsRemoveProxyDrive::DoRequestL },
1.165 + { EFsMountProxyDrive, 0, &TFsMountProxyDrive::Initialise, NULL, &TFsMountProxyDrive::DoRequestL },
1.166 + { EFsDismountProxyDrive, 0, &TFsDismountProxyDrive::Initialise, NULL, &TFsDismountProxyDrive::DoRequestL },
1.167 + { EFsNotificationOpen, ESync, &TFsNotificationOpen::Initialise, NULL, &TFsNotificationOpen::DoRequestL },
1.168 + { EFsNotificationBuffer, ESync, &TFsNotificationBuffer::Initialise, NULL, &TFsNotificationBuffer::DoRequestL },
1.169 + { EFsNotificationRequest, ESync, &TFsNotificationRequest::Initialise, NULL, &TFsNotificationRequest::DoRequestL },
1.170 + { EFsNotificationCancel, ESync, &TFsNotificationCancel::Initialise, NULL, &TFsNotificationCancel::DoRequestL },
1.171 + { EFsNotificationSubClose, ESync, &TFsNotificationSubClose::Initialise, NULL, &TFsNotificationSubClose::DoRequestL },
1.172 + { EFsNotificationAdd, ESync, &TFsNotificationAdd::Initialise, NULL, &TFsNotificationAdd::DoRequestL },
1.173 + { EFsNotificationRemove, ESync, &TFsNotificationRemove::Initialise, NULL, &TFsNotificationRemove::DoRequestL },
1.174 + { EFsLoadCodePage, 0, &TFsLoadCodePage::Initialise, NULL, &TFsLoadCodePage::DoRequestL },
1.175 + };
1.176 +
1.177 +#endif //SF_OPS_H