tablelib.c
来自「深圳市微逻辑电子有限公司 巨果• Kingmos® 系统核心」· C语言 代码 · 共 749 行 · 第 1/2 页
C
749 行
#include <eframe.h>
#include <etable.h>
#include <eutable.h>
#include <eapisrv.h>
#include <epcore.h>
//typedef HTABLE (WINAPI * PTB_CREATE_EX)( LPCTSTR lpcszFileName, DWORD dwAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreate, UINT nFieldNum, DWORD dwTableFileSize );
typedef HTABLE (WINAPI * PTB_CREATE_BY_STRUCT)( LPCREATE_TABLE lpct );
HTABLE WINAPI Tb_CreateByStruct( LPCREATE_TABLE lpct )
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_TABLE, TB_CREATE, 1 );
cs.arg0 = (DWORD)lpct;
return (HTABLE)CALL_SERVER( &cs );
#else
FARPROC lpfn;
CALLSTACK cs;
HTABLE retv = INVALID_HANDLE_VALUE;
if( API_Enter( API_TABLE, TB_CREATE, &lpfn, &cs ) )
{
lpct = MapProcessPtr( lpct, (LPPROCESS)cs.lpvData );
retv = ((PTB_CREATE_BY_STRUCT)lpfn)( lpct );
API_Leave( );
}
return retv;
#endif
}
HTABLE WINAPI Tb_CreateEx( LPCTSTR lpcszFileName,
DWORD dwAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreate,
UINT nFieldNum,
DWORD dwTableFileSize )
{
CREATE_TABLE ct;
memset( &ct, 0, sizeof( ct ) );
ct.dwSize = sizeof(ct);
ct.lpcszFileName = lpcszFileName;
ct.dwAccess = dwAccess;
ct.dwShareMode = dwShareMode;
ct.lpSecurityAttributes = lpSecurityAttributes;
ct.dwCreate = dwCreate;
ct.nFieldNum = nFieldNum;
ct.dwFileSizeLimit = dwTableFileSize;
return Tb_CreateByStruct( &ct );
}
HTABLE WINAPI Tb_Create( LPCTSTR lpcszFileName,
DWORD dwAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreate,
UINT nFieldNum )
{
return Tb_CreateEx( lpcszFileName, dwAccess, dwShareMode, lpSecurityAttributes, dwCreate, nFieldNum, 0 );
}
typedef BOOL ( WINAPI * PTB_DELETE )( LPCTSTR lpcszFileName );
BOOL WINAPI Tb_Delete( LPCTSTR lpcszFileName )
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_TABLE, TB_DELETE, 1 );
cs.arg0 = (DWORD)lpcszFileName ;
return (DWORD)CALL_SERVER( &cs );
#else
FARPROC lpfn;
CALLSTACK cs;
BOOL retv = FALSE;
if( API_Enter( API_TABLE, TB_DELETE, &lpfn, &cs ) )
{
lpcszFileName = MapProcessPtr( lpcszFileName, (LPPROCESS)cs.lpvData );
retv = ((PTB_DELETE)lpfn)( lpcszFileName );
API_Leave( );
}
return retv;
#endif
}
typedef BOOL ( WINAPI * PTB_CLOSE )( HTABLE hTable );
BOOL WINAPI Tb_Close( HTABLE hTable )
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_TABLE, TB_CLOSE, 1 );
cs.arg0 = (DWORD)hTable ;
return (DWORD)CALL_SERVER( &cs );
#else
FARPROC lpfn;
CALLSTACK cs;
BOOL retv = FALSE;
if( API_Enter( API_TABLE, TB_CLOSE, &lpfn, &cs ) )
{
retv = ((PTB_CLOSE)lpfn)( hTable );
API_Leave( );
}
return retv;
#endif
}
typedef WORD ( WINAPI * PTB_SETRECORDPOINTER )( HTABLE hTable, long lOffset, UINT fMethod );
WORD WINAPI Tb_SetRecordPointer( HTABLE hTable, long lOffset, UINT fMethod )
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_TABLE, TB_SETRECORDPOINTER, 3 );
cs.arg0 = (DWORD)hTable;
return (WORD)CALL_SERVER( &cs, lOffset, fMethod );
#else
FARPROC lpfn;
CALLSTACK cs;
WORD retv = 0xffff;
if( API_Enter( API_TABLE, TB_SETRECORDPOINTER, &lpfn, &cs ) )
{
retv = ((PTB_SETRECORDPOINTER)lpfn)( hTable, lOffset, fMethod );
API_Leave( );
}
return retv;
#endif
}
typedef WORD ( WINAPI * PTB_NEXTRECORDPOINTER )( HTABLE hTable, BOOL bNext );
WORD WINAPI Tb_NextRecordPointer( HTABLE hTable, BOOL bNext )
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_TABLE, TB_NEXTRECORDPOINTER, 2 );
cs.arg0 = (DWORD)hTable;
return (WORD)CALL_SERVER( &cs, bNext );
#else
FARPROC lpfn;
CALLSTACK cs;
WORD retv = 0xffff;
if( API_Enter( API_TABLE, TB_NEXTRECORDPOINTER, &lpfn, &cs ) )
{
retv = ((PTB_NEXTRECORDPOINTER)lpfn)( hTable, bNext );
API_Leave( );
}
return retv;
#endif
}
typedef WORD ( WINAPI * PTB_READFIELD )( HTABLE hTable, UINT nField, WORD wStartPos, void * lpBuf, WORD wSizeLimit );
WORD WINAPI Tb_ReadField( HTABLE hTable,
UINT nField,
WORD wStartPos,
void * lpBuf,
WORD wSizeLimit )
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_TABLE, TB_READFIELD, 5 );
cs.arg0 = (DWORD)hTable;
return (WORD)CALL_SERVER( &cs, nField, wStartPos, lpBuf, wSizeLimit );
#else
FARPROC lpfn;
CALLSTACK cs;
WORD retv = 0;
if( API_Enter( API_TABLE, TB_READFIELD, &lpfn, &cs ) )
{
lpBuf = MapProcessPtr( lpBuf, (LPPROCESS)cs.lpvData );
retv = ((PTB_READFIELD)lpfn)( hTable, nField, wStartPos, lpBuf, wSizeLimit );
API_Leave( );
}
return retv;
#endif
}
typedef WORD ( WINAPI * PTB_WRITEFIELD )( HTABLE hTable, UINT nField, const void * lpcvBuf, WORD wSize );
WORD WINAPI Tb_WriteField( HTABLE hTable, UINT nField, const void * lpcvBuf, WORD wSize )
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_TABLE, TB_WRITEFIELD, 4 );
cs.arg0 = (DWORD)hTable;
return (WORD)CALL_SERVER( &cs, nField, lpcvBuf, wSize );
#else
FARPROC lpfn;
CALLSTACK cs;
WORD retv = 0;
if( API_Enter( API_TABLE, TB_WRITEFIELD, &lpfn, &cs ) )
{
lpcvBuf = MapProcessPtr( lpcvBuf, (LPPROCESS)cs.lpvData );
retv = ((PTB_WRITEFIELD)lpfn)( hTable, nField, lpcvBuf, wSize );
API_Leave( );
}
return retv;
#endif
}
typedef long ( WINAPI * PTB_WRITERECORD )( HTABLE hTable, FIELDITEM fieldItem[] );
long WINAPI Tb_WriteRecord( HTABLE hTable, FIELDITEM fieldItem[] )
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_TABLE, TB_WRITERECORD, 2 );
cs.arg0 = (DWORD)hTable;
return (DWORD)CALL_SERVER( &cs, fieldItem );
#else
FARPROC lpfn;
CALLSTACK cs;
long retv = 0;
if( API_Enter( API_TABLE, TB_WRITERECORD, &lpfn, &cs ) )
{
fieldItem = MapProcessPtr( fieldItem, (LPPROCESS)cs.lpvData );
retv = ((PTB_WRITERECORD)lpfn)( hTable, fieldItem );
API_Leave( );
}
return retv;
#endif
}
typedef BOOL ( WINAPI * PTB_DELETERECORD )( HTABLE hTable, UINT uiRecord, DWORD dwFlag );
BOOL WINAPI Tb_DeleteRecord( HTABLE hTable, UINT uiRecord, DWORD dwFlag )
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_TABLE, TB_DELETERECORD, 3 );
cs.arg0 = (DWORD)hTable;
return (DWORD)CALL_SERVER( &cs, uiRecord, dwFlag );
#else
FARPROC lpfn;
CALLSTACK cs;
BOOL retv = FALSE;
if( API_Enter( API_TABLE, TB_DELETERECORD, &lpfn, &cs ) )
{
retv = ((PTB_DELETERECORD)lpfn)( hTable, uiRecord, dwFlag );
API_Leave( );
}
return retv;
#endif
}
typedef BOOL ( WINAPI * PTB_SORTRECORD )( HTABLE hTable, WORD field, FIELDCOMPPROC lpfcProc );
BOOL WINAPI Tb_SortRecord( HTABLE hTable, WORD field, FIELDCOMPPROC lpfcProc )
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_TABLE, TB_SORTRECORD, 3 );
cs.arg0 = (DWORD)hTable;
return (DWORD)CALL_SERVER( &cs, field, lpfcProc );
#else
FARPROC lpfn;
CALLSTACK cs;
BOOL retv = FALSE;
if( API_Enter( API_TABLE, TB_SORTRECORD, &lpfn, &cs ) )
{
retv = ((PTB_SORTRECORD)lpfn)( hTable, field, lpfcProc );
API_Leave( );
}
return retv;
#endif
}
typedef BOOL ( WINAPI * PTB_APPENDRECORD )( HTABLE hTable, FIELDITEM fieldItem[] );
BOOL WINAPI Tb_AppendRecord( HTABLE hTable, FIELDITEM fieldItem[] )
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_TABLE, TB_APPENDRECORD, 2 );
cs.arg0 = (DWORD)hTable;
return (DWORD)CALL_SERVER( &cs, fieldItem );
#else
FARPROC lpfn;
CALLSTACK cs;
BOOL retv = FALSE;
if( API_Enter( API_TABLE, TB_APPENDRECORD, &lpfn, &cs ) )
{
fieldItem = MapProcessPtr( fieldItem, (LPPROCESS)cs.lpvData );
retv = ((PTB_APPENDRECORD)lpfn)( hTable, fieldItem );
API_Leave( );
}
return retv;
#endif
}
typedef BOOL ( WINAPI * PTB_READRECORD )(
HTABLE hTable,
void * lpvData,
FIELDITEM fieldItem[],
DWORD * lpdwSize );
BOOL WINAPI Tb_ReadRecord(
HTABLE hTable,
void * lpvData,
FIELDITEM fieldItem[],
DWORD * lpdwSize )
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_TABLE, TB_READRECORD, 4 );
cs.arg0 = (DWORD)hTable;
return (DWORD)CALL_SERVER( &cs, lpvData, fieldItem, lpdwSize );
#else
FARPROC lpfn;
CALLSTACK cs;
BOOL retv = FALSE;
if( API_Enter( API_TABLE, TB_READRECORD, &lpfn, &cs ) )
{
lpvData = MapProcessPtr( lpvData, (LPPROCESS)cs.lpvData );
fieldItem = MapProcessPtr( fieldItem, (LPPROCESS)cs.lpvData );
lpdwSize = MapProcessPtr( lpdwSize, (LPPROCESS)cs.lpvData );
retv = ((PTB_READRECORD)lpfn)( hTable, lpvData, fieldItem, lpdwSize );
API_Leave( );
}
return retv;
#endif
}
typedef BOOL ( WINAPI * PTB_INSERTRECORD )( HTABLE hTable, WORD nPos, FIELDITEM fieldItem[] );
BOOL WINAPI Tb_InsertRecord( HTABLE hTable, WORD nPos, FIELDITEM fieldItem[] )
{
#ifdef CALL_TRAP
CALLTRAP cs;
cs.apiInfo = CALL_API( API_TABLE, TB_INSERTRECORD, 3 );
cs.arg0 = (DWORD)hTable;
return (DWORD)CALL_SERVER( &cs, nPos, fieldItem );
#else
FARPROC lpfn;
CALLSTACK cs;
BOOL retv = FALSE;
if( API_Enter( API_TABLE, TB_INSERTRECORD, &lpfn, &cs ) )
{
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?