#ifndef __SlfIO_H__ #define __SlfIO_H__ //#define Slf_LIB #include #include #include #include "CStringType.h" #include "SlfioExport.h" #define REPR_INT 1 #define REPR_SHORT 2 #define REPR_LONG 3 #define REPR_FLOAT 4 #define REPR_DOUBLE 5 #define REPR_STRING 6 #define REPR_CHAR 7 #define REPR_UCHAR 8 #define REPR_USHORT 9 #define REPR_UINT 10 #define REPR_ULONG 11 #define CHANNEL_OBJECT 0x0001 #define TABLE_OBJECT 0x0002 #define STREAM_OBJECT 0x0003 #define OBJECT_NORMAL 0x0000 #define OBJECT_DISCARD 0x0001 #define OBJECT_DELETE 0x0002 #define CURVE_OBJECT 0x0001 #define WAVE_OBJECT 0x0002 #define FMT_OBJECT 0x0003 #define TDT_OBJECT 0x0004 #define CARD_OBJECT 0x0005 #define TABLEE_OBJECT 0x0006 #define PARA_OBJECT 0x0001 #define BINARY_OBJECT 0x0002 #define RESULT_OBJECT CARD_OBJECT+0x0001 #define CORE_OBJECT CARD_OBJECT+0x0002 #define LITH_OBJECT CARD_OBJECT+0x0003 #define FRAC_MODEL_OBJECT CARD_OBJECT+0x0004 #define FRAC_LEVEL_OBJECT CARD_OBJECT+0x0005 #define CORE_PHYSICS_OBJECT CARD_OBJECT+0x0006 #define GEO_LOGGING_OBJECT CARD_OBJECT+0x0007 #define SWALL_CORE_OBJECT CARD_OBJECT+0x0008 #define LITH_SECT_OBJECT CARD_OBJECT+0x0009 #define FMT_MODEL_OBJECT CARD_OBJECT+0x000A #define FMT_RESULT_OBJECT CARD_OBJECT+0x000B #define RFT_RESULT_OBJECT CARD_OBJECT+0x000C #define STATIC_OBJECT CARD_OBJECT+0x000D #define DYNAMIC_OBJECT CARD_OBJECT+0x000E #define NEWRESULT_OBJECT CARD_OBJECT+0x000F #define GUJING_OBJECT CARD_OBJECT+0x0010 #ifndef TRUE #define TRUE 1 #define FALSE 0 #endif #ifndef WIN32 typedef unsigned int __time32_t; #define stricmp strcasecmp char *strupr(char *str); #endif CString SLFIO_EXPORT MemName(CString wellname,CString Curve); int SLFIO_EXPORT IsMappingMem(const char *MemName); bool SLFIO_EXPORT MappingMem(HANDLE *hHandle,LPSTR *hMem,int len,const char *name); void SLFIO_EXPORT CloseView(HANDLE hMapObject,LPVOID lpvMem); SLFIO_EXPORT extern const char *Rep_STR[]; SLFIO_EXPORT extern int RepSize[12]; SLFIO_EXPORT time_t StringToTime(char * szTime); SLFIO_EXPORT int Slf_Int(float depth,float stdep,float rlev); #ifdef _UNIX_ #define MACHINE_TYPE 1 #else #define MACHINE_TYPE 0 #endif union MyDataTypeEnum { int *vint; short *vshort; unsigned int *vlong; float *vfloat; double *vdouble; char* vchar; char *VCHAR; unsigned char *vuchar; unsigned short *vushort; unsigned int *vuint; unsigned int *vulong; }; typedef struct tagSlf_HEAD { // char Version[10]; WORD MachineType; // 0-PC 1-SUN 2-IBM 3-HP WORD MaxObjectNumber; WORD ObjectNumber; WORD BlockLen; DWORD EntryOffset; DWORD DataOffset; DWORD FileSize; __time32_t TimeCreate; char Reserved[32]; }Slf_HEAD; typedef struct tagSlf_OBJECT_ENTRY { char Name[16]; int Status; short Attribute; short SubAttribute; DWORD Position; DWORD BlockNum; __time32_t TimeCreate; __time32_t TimeWrite; char Reserved[32]; }Slf_OBJECT_ENTRY; typedef struct tagSlf_FILE_MESSAGE { //起始位置 变量名称 字节长度 描 述 char AreaName[64];// 64 油矿名称 char OilCompanyName[64];// 64 公司名称 char WellName[64];// 64 井名 char WellAliasName[64];//绘图需要的井名 char WellType[20];// 20 井类型:直井、斜井 double Xcoor;// 4 大地x坐标 double Ycoor;// 4 大地y坐标 float Altitude;// 4 海拔高度 float Kelly;// 4 补心高度 float StartDepth;// 4 起始深度 float EndDepth;// 4 终止深度 __time32_t StartDrillDate;// 4 开钻时间 __time32_t EndDrillDate;// 4 完钻时间 __time32_t LoggingDate;// 4 测井时间 char LogCompanyName[64];// 64 测井公司 char LoggingTeam[32];// 20 测井队 char Operator[32];// 20 操作员 char LoggingSerial[32];// 20 测井系列 float Well_Bottom_Temperature;//井底温度 float Mud_Density[10]; float Mud_Viscosity[10]; float Mud_Resistivity[10]; float Bit_Diameter[10]; float Bushing_Detpth[10]; float Bushing_Inside_Diameter[10]; float Bushing_Outside_Diameter[10]; float Bit_Depth[10]; char Mud_Property[32];//泥浆性能 char YqType[32];//仪器类型:skd3000、h2530、5700 char JB[32];//井别:开发、探井、采油井、注水井 float LoggingDepth;//测时井深 float azca;//闭合方位,磁偏角 float TVD;// 备注 double X0,Y0; float Z0;// 起始测点位置坐标偏移量 float Mud_Temp;// 泥浆温度 char Intor[12];// 备注 char IntDepths[12];// 备注 char audit[32]; char Prog[32]; float WaterLoss; char Item[32]; // char temp[1024]; // char Reserved[12];// 备注 char Reserved[10];// 备注 }Slf_FILE_MESSAGE; typedef struct tagSlf_FILE_HEAD { //起始位置 变量名称 字节长度 描 述 char Version[12];// 12 版本号 DWORD BinaryType;// 4 二进制数据标准 DWORD TableNumber;// 4 已存储表个数 DWORD MaxTableNumber;// 4 预留最大表个数 DWORD TableMessageLength;// 4 表基本信息长度 __time32_t TimeCreate;// 32 文件产生时间 ///////////////////////////////////// Slf_FILE_MESSAGE WellMessage; }Slf_FILE_HEAD; QDataStream & operator << (QDataStream & out, const tagSlf_FILE_HEAD & aSlf_FILE_HEAD); //QDataStream & operator >> (QDataStream & in, Slf_FILE_HEAD & aSlf_FILE_HEAD) { //} typedef struct tagSlf_DATAPOS_RECORDNUM { DWORD DataPosition;// 4 原始数据体存储的位置 DWORD DataRecordNum;// 4 原始表数据体记录数 }Slf_DATAPOS_RECORDNUM; typedef struct tagSlf_SLF_TABLE_History { //起始位置 变量名称 字节数 描 述 DWORD StartRecord;// 4 表体更改起始记录号 DWORD EndRecord;// 4; 表体更改终止记录号 char UserName[64];// 64 修改者 __time32_t Time;// 4 修改时间 }Slf_TABLE_History; typedef struct tagSlf_TABLE_ENTRY { //起始位置 变量名称 字节数 描 述 char Name[64];// 64 表名称 char HZName[64];// 64 表别名 char Unit[32];// 64 表别名 char HZUnit[32];// 64 表别名 char DataSource[32];// 20 数据来源 short Type;// 2 表类型 short Status;// 2 表删除标志 DWORD SerialID;// 2 所属系列代码 DWORD FieldNum;// 4 字段个数 DWORD Position;// 4 表字段所存储的位置 Slf_DATAPOS_RECORDNUM DataRecord[11]; int Type1; //子类型 short IsSave;// 2 是否自动备份原始数据 short ChangeNum;// 2 修改次数 int RecondNum; // 数据块数 char LogCopanyName[64];//公司名 char LoggingTeam[32];//测井队 char Operator[32];//操作员 unsigned int LoggingDate;//测井时间 // Slf_TABLE_History*pSLF_TABLE_History;// 76 修改历史信息描述结构变量数组 }Slf_TABLE_ENTRY; typedef struct tagSlf_OBJECT_BASE_INF { //起始位置 变量名称 字节数 描 述 char Name[64];// 64 表名称 char HZName[64];// 64 表别名 char Unit[32];// 64 表别名 char HZUnit[32];// 64 表别名 char DataSource[32];// 20 数据来源 char LogCopanyName[64];//公司名 char LoggingTeam[32];//测井队 char Operator[32];//操作员 unsigned int LoggingDate;//测井时间 }Slf_OBJECT_BASE_INF; typedef struct tagSlf_OBJECT_FIELD { //起始位置 变量名称 字节长度 描 述 char Name[64];// 64 字段名称 char HZName[64];// 64 别名 char Unit[32];// 32 字段单位 char HZUnit[32];// 32 单位别名 short RepCode;// 2 字段数据类型 short CodeLength;// 2 字段数据类型长度 short Sequence;// 2 是否连续控制 float Start;// 4 字段起始值 float End;// 4 字段起始值 float Rlev;// 4 字段采样间隔 int SamplePoint;// 4 一个阵列的横向采样样本点数 int ArrayNum;// 4 阵列数 float Vmin;// 4 字段最大值 float Vmax;// 4 字段最小值 float DefVal;// 4 缺省值 char Reserved[26];// 30 备用 }Slf_OBJECT_FIELD; typedef struct tagSlf_CHANNEL_DIMENSION { char Name[8]; char Unit[8]; char AliasName[16]; float StartVal; float Delta; DWORD Samples; DWORD MaxSamples; DWORD Size; WORD RepCode; WORD Reserved; }Slf_CHANNEL_DIMENSION; typedef struct tagSlf_CHANNEL { char Unit[8]; char AliasName[16]; char AliasUnit[16]; WORD RepCode; WORD CodeLen; float MinVal; float MaxVal; WORD Reserved; WORD NumOfDimension; Slf_CHANNEL_DIMENSION DimInfo[4]; }Slf_CHANNEL; typedef struct tagSlf_TABLE_MESSAGE { Slf_TABLE_ENTRY Table; Slf_OBJECT_FIELD *pField; }Slf_TABLE_MESSAGE; typedef struct tagSlf_STREAM { DWORD Length; DWORD Offset; }Slf_STREAM; typedef struct tagSlf_TABLE_FIELD_OLD { char Name[16]; char HZName[16]; WORD RepCode; WORD Length; DWORD Reserved;//0-数据,1-枚举 } Slf_TABLE_FIELD_OLD; typedef struct tagSlf_TABLE_FIELD { char Name[16]; char HZName[16]; WORD RepCode; WORD Length; DWORD Reserved;//0-数据,1-枚举 ////////扩展 char Unit[16]; char HZUnit[16]; } Slf_TABLE_FIELD; typedef struct tagSlf_TABLE { DWORD RecordCount; DWORD FieldCount; DWORD Length; // Slf_TABLE_FIELD *pField; }Slf_TABLE; typedef struct tagSlf_TABLE_HEAD { DWORD RecordCount; DWORD FieldCount; }Slf_TABLE_HEAD; typedef struct tagSlf_TABLE_DATA { int Num; float *pData; } TABLE_DATE; class SLFIO_EXPORT CSlfIO { public: enum OpenFlags { typeBinary = (int)0x8000, // derived classes only shareDenyNone = 0x0040, modeRead = 0x0000|typeBinary, modeWrite = 0x0001|typeBinary, modeReadWrite = 0x0002|typeBinary, shareCompat = 0x0000, shareExclusive = 0x0010, shareDenyWrite = 0x0020, shareDenyRead = 0x0030, modeNoInherit = 0x0080, modeCreate = 0x1000|modeReadWrite, modeNoTruncate = 0x2000, typeText = 0x4000 // typeText and typeBinary are used in //_O_CREAT }; QFile *mFile; bool IsWis; protected: // attributes char m_LogFileName[_MAX_PATH]; // HANDLE m_hFile; char ** Slf_Info_Head; public: Slf_HEAD m_Head; Slf_OBJECT_ENTRY* m_ObjectEntry; // attributes // CDefaultTableManager *m_DefaultTableManager; public: // operation void Init(int BlockLen,int MaxObjectNumber, int MachineType); void InitTable(int SystemCode,bool bCreate=FALSE); int ReadHead(); int WriteHead(); int ReadObjectEntry(); int WriteObjectEntry(); bool ExpandObject(int index, DWORD BlockNum); int FindFreeSpace(DWORD BlockNum,int nExceptIndex=-1); public: //Slf Operatons CSlfIO(); CSlfIO(const char* LogName,int FileType=0); ~CSlfIO(); bool Open(const char* LogName,unsigned int nOpenFlags,int BlockLen = 1024,int MaxObjectNumber=1024, int MachineType=MACHINE_TYPE,int FileType=0); bool Open(unsigned int nOpenFlags,int BlockLen = 1024,int MaxObjectNumber=1024, int MachineType=MACHINE_TYPE,int FileType=0); void Close(); void Pack(); DWORD GetObjectLength(char *name); bool CopyObjectToMem(Slf_OBJECT_ENTRY *my,char *name,char *buffer,int Len); float GetData(int RepCode,char *buffer,float *yy); void SetData(int RepCode,char *buffer,float *yy); void Convert(char*,DWORD,WORD); int mod(int,int); //Object Operations int FindObjectIndex(const char* name); int FindObjectName(char* name,short Attribute=-1, short SubAttribute=-1, int status=0,int otype=-1); bool DeleteObject(const char* name); bool DiscardObject(const char* name); bool DiscardObject(int index); bool RenameObject(const char* oldName,const char* newName); bool CopyObject(const char* oldName,const char* newName, bool bFailExist = TRUE); bool UnDeleteObject(const char* name); WORD GetObjectCount(); void SetObjectName(const char *Name,const char *Alias=NULL,const char *Unit=NULL,const char *AliasUnit=NULL,short Attribute=-1, short SubAttribute=-1, int status=-1,int otype=-1); void SetObjectName(int index, const char *Name=NULL,const char *Alias=NULL,const char *Unit=NULL,const char *AliasUnit=NULL); void GetObjectName(int index, char *Name,char *Unit=NULL,char *Alias=NULL,char *AliasUnit=NULL); void GetAllObjectEntry(Slf_OBJECT_ENTRY* pEntry,WORD count); void GetObjectEntry(int index,Slf_OBJECT_ENTRY* pEntry); void SetObjectReserved(int index,char * pEntry); void GetObjectAttribute(int index,short* Attribute, short* SubAttribute); bool GetObjectEntry(const char* name,Slf_OBJECT_ENTRY* pEntry); bool GetObjectAttribute(const char* name,short* Attribute, short* SubAttribute); Slf_OBJECT_FIELD * GetSlfTableFieldInfo(int index); //Channel Operations int OpenChannel(const char *name); int OpenChannel(const char *name,short Attribute); DWORD ComputerChannelLength(Slf_CHANNEL* pInfo,unsigned char nDimension); DWORD ComputerChannelLength(int index); int GetChannelDefaultValue(Slf_CHANNEL* pInfo,unsigned char nDimension,char* buffer,DWORD buflen); bool SetChannelPointNum(int index, DWORD nPointNum, DWORD samples1=0,DWORD samples2=0,DWORD samples3=0,DWORD samples4=0); DWORD GetChannelPointNum(int index,DWORD samples1=0,DWORD samples2=0,DWORD samples3=0,DWORD samples4=0); int CreateChannel(short SubAttribute,const char *name,Slf_CHANNEL* pInfo,bool bFailExist=FALSE); DWORD SeekChannel(int index,DWORD samples1=0,DWORD samples2=0,DWORD samples3=0,DWORD samples4=0); DWORD WriteChannel(int index,char* buffer,DWORD num, DWORD samples1=0,DWORD samples2=0,DWORD samples3=0,DWORD samples4=0); DWORD ReadChannel(int index,char* buffer,DWORD num, DWORD samples1=0,DWORD samples2=0,DWORD samples3=0,DWORD samples4=0); bool ExpandChannel(int index, unsigned char nDimension, DWORD nSamples, DWORD nTopSamples); bool MoveChannel(int index, unsigned char nDimension, DWORD nStart, int nMove, DWORD nTotal); bool OrderChannel(int index, unsigned char nDimension, int nMethod=1); bool CorrectChannel(int index, unsigned char nDimension, float delta); void ChannelResamples(int index,float newDelta); void CloseChannel(int index); bool InitChannelValue(int index); int ReadChannelInfo(int index,Slf_CHANNEL *Info=NULL); int WriteChannelInfo(int index,Slf_CHANNEL *Info=NULL); int GetMaxObjectNumber(); int GetObjectStatus(int index); //Table Opeartions int OpenTable(const char*name); int CreateTable(short SubAttribute,const char* name,DWORD length=8192,bool bFailExist=TRUE); bool CloseTable(int index); bool SeekTable(int index, int OffsetCount=0, DWORD dwMoveMode=0); int GetTableRecordCount(int index); int SetTableHead(int index,DWORD REC,DWORD COUNT,Slf_TABLE_FIELD *field=NULL); bool SetTableRecordCount(int index,int Count); bool ExpandTable(int index,DWORD BlockNum); int GetTableFieldCount(int index); bool GetTableFieldInfo(int index,Slf_TABLE_FIELD *FieldInfo); bool SetTableFieldInfo(int index,Slf_TABLE_FIELD *FieldInfo); int GetTableRecordLength(int index); int ReadTable(int index, int RecNo, void *buffer); int WriteTable(int index, int RecNo, void *buffer); int SetWisTableFieldInfo(int index,Slf_TABLE_FIELD *FieldInfo); void InitSlf(int BlockLen,int MaxObjectNumber, int MachineType); int ReadSlfHead(); int WriteSlfHead(); int ReadSlfObjectEntry(); int WriteSlfObjectEntry(); bool OpenSlf(const char* LogName,unsigned int nOpenFlags,int BlockLen = 1024,int MaxObjectNumber=1024, int MachineType=MACHINE_TYPE); bool OpenSlf(unsigned int nOpenFlags,int BlockLen = 1024,int MaxObjectNumber=1024, int MachineType=MACHINE_TYPE); void GetSlfHead(Slf_FILE_HEAD* pHead); DWORD GetSlfTableLength(char *name); //Object Operations int FindSlfObjectName(char* name,short Attribute=-1, short SubAttribute=-1, int status=0,int otype=-1); bool DeleteSlfObject(const char* name); bool DiscardSlfObject(const char* name); bool DiscardSlfObject(int index); bool RenameSlfObject(const char* oldName,const char* newName); bool CopySlfObject(const char* oldName,const char* newName, bool bFailExist = TRUE); bool UndeleteSlfObject(const char* name); WORD GetSlfObjectCount(); void GetAllSlfObjectEntry(Slf_TABLE_ENTRY* pEntry,WORD count); void GetSlfObjectEntry(int index,Slf_TABLE_ENTRY* pEntry); void SetSlfObjectReserved(int index,char * pEntry); void GetSlfObjectAttribute(int index,short* Attribute, short* SubAttribute); bool GetSlfObjectEntry(const char* name,Slf_TABLE_ENTRY* pEntry); bool GetSlfObjectAttribute(const char* name,short* Attribute, short* SubAttribute); DWORD GetSlfTableLength(int index); int OpenSlfTable(int index,short att=-1); int OpenSlfTable(const char*name,short att=-1); int CreateSlfTable(short SubAttribute,const char* name,const char* hzname=NULL,DWORD FieldNum=1,Slf_OBJECT_FIELD *pField=NULL,bool bFailExist=TRUE); bool CloseSlfTable(int index); bool SeekSlfTable(int index, int OffsetCount=0, DWORD dwMoveMode=0); int GetSlfTableRecordCount(int index); int SetSlfTableHead(int index,DWORD REC,DWORD COUNT,Slf_OBJECT_FIELD *field); bool SetSlfTableRecordCount(int index,int Count); bool ExpandSlfTable(int index,int RecNum); int GetSlfTableFieldCount(int index); bool GetSlfTableFieldInfo(int index,Slf_OBJECT_FIELD *FieldInfo); bool SetSlfTableFieldInfo(int index,Slf_OBJECT_FIELD *FieldInfo,bool SetNewFieldInfo=TRUE); int GetSlfTableRecordLength(int index,Slf_OBJECT_FIELD *FieldInfo=NULL); int GetSlfTableFieldOffset(int index,int FieldNo,Slf_OBJECT_FIELD *FieldInfo=NULL); int ReadSlfTable(int index, int EndRec, void *buffer,int FirstRec=0); int WriteSlfTable(int index, int EndRec, void *buffer,int FirstRec=0); bool WriteSlfObjectEntry(int index,Slf_TABLE_ENTRY *obj=NULL); bool DiscardSlfObjectData(int index,bool DeleteField=TRUE); int FindSlfFieldNo(int index,char *FieldName); //Stream Operations int OpenStream(const char* name); int CreateStream(short SubAttribute,const char *name,DWORD length=16384,bool bFailExist=TRUE); bool ExpandStream(int index, DWORD BlockNum); void CloseStream(int index); bool SetStreamLength(int index, DWORD length); bool SeekStream(int index, int lMove=0, DWORD dwMoveMode=0); bool ReadStream(int index, DWORD length, LPDWORD lpBytesRead, char *buffer); bool WriteStream(int index, DWORD length, LPDWORD lpBytesWrite, const char *buffer); DWORD GetStreamLength(int index); int ReadStreamInfo(int index); int WriteStreamInfo(int index); bool CopyFromWisFile(CSlfIO &Source,char *Name,char *NewName); bool CopyFromWisFile(CSlfIO &Source,char *Name); bool WriteWisStream(int index, DWORD length, LPDWORD lpBytesWrite, const char *buffer); DWORD GetWisStreamLength(int index); void WisPack(); void GetData(int RepCode,char *buffer,char *format,char *buf); bool CopyFromFile(CSlfIO &Source,char *Name); bool CopyFromFile(CSlfIO &Source,char *Name,char *NewObject); Slf_FILE_HEAD m_SlfHead; Slf_DATAPOS_RECORDNUM datarecord; Slf_TABLE_History History; Slf_TABLE_ENTRY *m_SlfObjectEntry; Slf_OBJECT_FIELD *objhead; bool WriteSlfHistory(int index,Slf_TABLE_History*pHistory); void SetSlfMessage(Slf_FILE_MESSAGE mssage); int OpenSlfStream(const char* name); int CreateSlfStream(short SubAttribute,const char *name,DWORD length=8192,bool bFailExist=TRUE,const char *hzname=NULL); bool ExpandSlfStream(int index, DWORD BlockNum); void CloseSlfStream(int index); bool SetSlfStreamLength(int index, DWORD length); bool SeekSlfStream(int index, int lMove=0, DWORD dwMoveMode=0); bool ReadSlfStream(int index, DWORD length, LPDWORD lpBytesRead, char *buffer); bool WriteSlfStream(int index, DWORD length, LPDWORD lpBytesWrite, const char *buffer); DWORD GetSlfStreamLength(int index); int ReadSlfStreamInfo(int index); int WriteSlfStreamInfo(int index); int OpenSlfChannel(const char *name); int OpenSlfChannel(const char *name,short Attribute); DWORD ComputerSlfChannelLength(int index); bool CorrectSlfTableField(int index, unsigned char nDimension, float delta); void ChannelSlfResamples(int index,float newDelta); void InitWis(int BlockLen,int MaxObjectNumber, int MachineType); int ReadWisHead(); int WriteWisHead(); int ReadWisObjectEntry(); int WriteWisObjectEntry(); int WriteWisObjectEntry(int index,Slf_OBJECT_ENTRY *mEntry=NULL); bool ExpandWisObject(int index, DWORD BlockNum); int WisFindFreeSpace(DWORD BlockNum,int nExceptIndex=-1); public: //Slf Operatons bool OpenWis(unsigned int nOpenFlags,int BlockLen = 1024,int MaxObjectNumber=1024, int MachineType=MACHINE_TYPE); void GetWisHead(Slf_HEAD* pHead); DWORD GetWisObjectLength(char *name); bool CopyWisObjectToMem(Slf_OBJECT_ENTRY *my,char *name,char *buffer,int Len); bool CopyFromWisFile(Slf_OBJECT_ENTRY *my,char *buffer,int Len); //Object Operations int FindWisObjectName(char* name,short Attribute=-1, short SubAttribute=-1, int status=0); bool DeleteWisObject(const char* name); bool DiscardWisObject(const char* name); bool DiscardWisObject(int index); bool RenameWisObject(const char* oldName,const char* newName); bool CopyWisObject(const char* oldName,const char* newName, bool bFailExist = TRUE); bool UnDeleteWisObject(const char* name); WORD GetWisObjectCount(); void GetAllWisObjectEntry(Slf_OBJECT_ENTRY* pEntry,WORD count); void GetWisObjectEntry(int index,Slf_OBJECT_ENTRY* pEntry); void SetWisObjectReserved(int index,char * pEntry); void GetWisObjectAttribute(int index,short* Attribute, short* SubAttribute); bool GetWisObjectEntry(const char* name,Slf_OBJECT_ENTRY* pEntry); bool GetWisObjectAttribute(const char* name,short* Attribute, short* SubAttribute); //Channel Operations int OpenWisChannel(const char *name); int OpenWisChannel(const char *name,short Attribute); DWORD ComputerWisChannelLength(Slf_CHANNEL* pInfo,unsigned char nDimension); DWORD ComputerWisChannelLength(int index); int GetWisChannelDefaultValue(Slf_CHANNEL* pInfo,unsigned char nDimension,char* buffer,DWORD buflen); bool SetWisChannelPointNum(int index, DWORD nPointNum, DWORD samples1=0,DWORD samples2=0,DWORD samples3=0,DWORD samples4=0); DWORD GetWisChannelPointNum(int index,DWORD samples1=0,DWORD samples2=0,DWORD samples3=0,DWORD samples4=0); int CreateWisChannel(short SubAttribute,const char *name,Slf_CHANNEL* pInfo,bool bFailExist=FALSE); DWORD SeekWisChannel(int index,DWORD samples1=0,DWORD samples2=0,DWORD samples3=0,DWORD samples4=0); DWORD WriteWisChannel(int index,char* buffer,DWORD num, DWORD samples1=0,DWORD samples2=0,DWORD samples3=0,DWORD samples4=0); DWORD ReadWisChannel(int index,char* buffer,DWORD num, DWORD samples1=0,DWORD samples2=0,DWORD samples3=0,DWORD samples4=0); bool ExpandWisChannel(int index, unsigned char nDimension, DWORD nSamples, DWORD nTopSamples); bool MoveWisChannel(int index, unsigned char nDimension, DWORD nStart, int nMove, DWORD nTotal); bool OrderWisChannel(int index, unsigned char nDimension, int nMethod=1); bool CorrectWisChannel(int index, unsigned char nDimension, float delta); void WisChannelResamples(int index,float newDelta); int ReadWisChannelInfo(int index,Slf_CHANNEL *Info=NULL); int WriteWisChannelInfo(int index,Slf_CHANNEL *Info=NULL); int CreateWisStream(short SubAttribute,const char *name,DWORD length=8192,bool bFailExist=TRUE); //Table Opeartions bool SeekWisStream(int index, int lMove=0, DWORD dwMoveMode=0); bool ReadWisStream(int index, DWORD length, LPDWORD lpBytesRead, char *buffer); bool SetWisStreamLength(int index, DWORD length); bool ExpandWisStream(int index, DWORD BlockNum); int OpenWisStream(const char* namee); int OpenWisTable(const char*name); int CreateWisTable(short SubAttribute,const char* name,DWORD length=8192,bool bFailExist=TRUE); bool SeekWisTable(int index, int OffsetCount=0, DWORD dwMoveMode=0); int GetWisTableRecordCount(int index); int SetWisTableHead(int index,DWORD REC,DWORD COUNT,Slf_TABLE_FIELD *field=NULL); bool SetWisTableRecordCount(int index,int Count); bool ExpandWisTable(int index,DWORD BlockNum); int GetWisTableFieldCount(int index); bool GetWisTableFieldInfo(int index,Slf_TABLE_FIELD *FieldInfo); int GetWisTableRecordLength(int index); int ReadWisTable(int index, int count, void *buffer); int WriteWisTable(int index, int count, void *buffer); int ReadWisStreamInfo(int index); int WriteWisStreamInfo(int index); void SlfPack(); bool CopySlfObjectToMem(Slf_TABLE_MESSAGE *my,char *name,char *buffer,int Len); bool CopyFromSLFFile(Slf_TABLE_MESSAGE *my,char *buffer,int Len); bool CopyFromSLFFile(CSlfIO &Source,char *Name); bool CopyFromSLFFile(CSlfIO &Source,char *Name,char *NewName); void MoveSlfTable(int index,int RecFist,int RecEnd,int Move); void SlfTableResamples(int index,float newDelta); int ReadSlfTableFieldData(int index,int FieldNo,int RecNum,void *buffer,int FirstRec=0,int Count=0); int WriteSlfTableFieldData(int index,int FieldNo,int RecNum,void *buffer,int FirstRec=0,int Count=0); int DeleteSlfTableRecord(int index,int RecNum,int FirstRec); void GetSlfMessage(Slf_FILE_MESSAGE &mssage); //whp add short GetObjectType(int index); short GetObjectType(const char* name); short GetWisObjectType(int index); short GetWisObjectType(const char* name); short GetSlfObjectType(int index); short GetSlfObjectType(const char* name); bool RenameWisObject(int index,const char* newNamee); bool RenameSlfObject(int index,const char* newNamee); bool RenameObject(int index,const char* newNamee); void Clear(); int FindWisObjectIndex(const char* namee,int status=0); int FindSlfObjectIndex(const char* namee,int status=0); int CreateTable(short Attribute,const char* name,const char* hzname,DWORD FieldNum=0,Slf_OBJECT_FIELD *pField=NULL,bool bFailExist=NULL); HANDLE mHandle; int* m_Value; //whp add 2011.12.18 bool UndeleteSlfObject(int index);//如果有多个同名的删除对象,可以选择恢复 bool UnDeleteObject(int index); void GetSlfObjectBaseInf(int index,Slf_OBJECT_BASE_INF* pBaseInf); bool GetSlfObjectBaseInf(const char* name,Slf_OBJECT_BASE_INF* pBaseInf); bool WriteSlfObjectBaseInf(int index,Slf_OBJECT_BASE_INF *obj); bool IsObject(int index); bool BackUpFile(); bool IsChange; char *GetSlfFileName(); int isShengLi; }; void SLFIO_EXPORT WriteShiftMessage(CSlfIO&mem,CString &szBuffer,QString name,QString card=QString()); float SLFIO_EXPORT ConvertDataByString(QString szText); QString SLFIO_EXPORT ConvertDataByFloat(float fValue); #endif // __SlfIO_H__