home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
pascal
/
tpw
/
owldemos
/
pxengine.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1991-05-20
|
36KB
|
912 lines
{************************************************}
{ }
{ Turbo Pascal for Windows }
{ Paradox Engine demo interface unit }
{ Copyright (c) 1991 by Borland International }
{ }
{************************************************}
unit PXEngine;
interface
uses WinProcs,WinTypes;
const
internalVersion = $02000002; { version number, same }
{ as found in .lib files }
{ Type definitions }
type
TableHandle = word; { table handle }
RecordHandle = word; { record handle }
FieldHandle = word; { field number 1.. }
LockHandle = Integer; { lock handle }
RecordNumber = LongInt; { record number 1.. }
Date = LongInt; { representation of date }
{ Maximum and default values for dynamic configuration. }
{ The default values are used if not overwritten in PXSetDefaults (DOS) }
{ or in WIN.INI (Windows) }
const
PXDefault = 0; { use internal default value }
MaxTableHandles = 64; { maximum number of open }
{ tables allowed at a time }
DefTableHandles = 5; { default number of open }
{ tables allowed at a time }
MaxRecordHandles = 128; { maximum number of record }
{ buffers available }
DefRecordHandles = 10; { default number of record }
{ buffers available }
MaxLockHandles = 128; { maximum number of lock }
{ handles per table }
DefLockHandles = 32; { default number of lock }
{ handles per table }
MaxFileHandles = 255; { maximum number of DOS file }
{ handles to use }
MinFileHandles = 2; { minimum number of DOS file }
{ handles to use }
DefFileHandles = 10; { default number of DOS file }
{ handles to use }
const
DefSortOrder = #255; { default sort order (ASCII) }
{ Swap buffer size }
const
MaxSwapSize = 256; { maximum buffer size allowed (k)}
MinSwapSize = 8; { minimum buffer size allowed (k)}
DefSwapSize = 32; { default buffer size (k) }
{ Network codes }
{ used in PXNetInit }
const
NotOnNet = 1; { Not on a net }
NovellNet = 2; { Novell }
ThreeComNet = 3; { 3Com }
ThreeOpenNet = 4; { 3Com 3+Open }
OtherNet = 5; { other: unknown DOS 3.1 compatible }
StarLanNet = 7; { Starlan }
BanyanNet = 8; { Banyan }
IBMPCNet = 9; { IBM PC }
const
LocalShare = 32; { enables sharing on local drives with }
{ any net type }
{ (i.e. OTHERNET | LOCALSHARE) }
const
DefUserName = nil; { use default username in PXNetInit() }
{ used in PXKeyAdd }
const
Primary = 0; { primary index (key) }
Secondary = 1; { not maintained secondary index }
IncSecondary = 2; { maintained secondary index }
{ used in PXSrchFld, PXSrchKey }
const
SearchFirst = 0; { search from beginning of table }
SearchNext = 1; { search from next record in table }
ClosestRecord = 2; { (modifier) goto 'nearest' record if }
{ no match found (ordered fields only) }
{ Lock types }
{ used in PXNetFileLock, PXNetFileUnlock, PXNetTblLock, PXNetTblUnlock }
const
FL = 1; { full lock, no concurrency }
WL = 2; { write lock }
PWL = 3; { prevent write lock }
PFL = 4; { prevent full lock, full concurrency }
{ macros for checking blank values }
const
BlankDate = $80000000;
BlankLong = $80000000;
BlankShort = $8000;
function IsBlankAlpha(x: PChar): Boolean;
inline(
$58/ { POP AX }
$5A/ { POP DX }
$1E/ { PUSH DS }
$DA8E/ { MOV DS,DX }
$C689/ { MOV SI,AX }
$C031/ { XOR AX,AX }
$AC/ { LODSB }
$1F { POP DS }
);
function IsBlankShort(x: Integer): Boolean;
inline(
$58/ { POP AX }
$35/$8000/ { XOR AX,$8000 }
$D8F7/ { NEG AX }
$C01B/ { SBB AX,AX }
$40 { INC AX }
);
function IsBlankLong(x: LongInt): Boolean;
inline(
$5A/ { POP DX }
$58/ { POP AX }
$35/$8000/ { XOR AX,$8000 }
$C20B/ { OR AX,DX }
$D8F7/ { NEG AX }
$C01B/ { SBB AX,AX }
$40 { INC AX }
);
function IsBlankDate(x: Date): Boolean;
inline(
$5A/ { POP DX }
$58/ { POP AX }
$35/$8000/ { XOR AX,$8000 }
$C20B/ { OR AX,DX }
$D8F7/ { NEG AX }
$C01B/ { SBB AX,AX }
$40 { INC AX }
);
{ successful Engine function operation returns }
const
PXSuccess = 0;
{ Error codes from Engine functions }
{ initialization errors }
const
PXErr_NotInitErr = 78; { Engine not initialized }
PXErr_AlreadyInit = 82; { Engine already initialized }
PXErr_NotLoggedIn = 98; { Could not login on network }
{ (to PARADOX.NET) }
PXErr_NoNetInit = 107; { Engine not initialized }
{ with PXNetInit }
PXErr_NetMultiple = 15; { multiple PARADOX.NET files }
PXErr_CantSharePDoxNet = 134; { can't lock PARADOX.NET -- is }
{ SHARE.EXE loaded? }
PXErr_WindowsRealMode = 135; { can't run Engine in Windows }
{ real mode }
{ hardware related errors }
const
PXErr_DriveNotReady = 1; { Drive not ready }
PXErr_DiskWritePro = 124; { Disk is write protected }
PXErr_GeneralFailure = 126; { General hardware error }
{ directory reg error codes }
const
PXErr_DirNotFound = 2; { Directory not found }
PXErr_DirBusy = 10; { Sharing violation }
PXErr_DirLocked = 11; { Sharing violation }
PXErr_DirNoAccess = 12; { No access to directory }
PXErr_DirNotPrivate = 14; { Single user, but directory is }
{ shared }
{ file oriented errors }
const
PXErr_FileBusy = 3; { File is busy }
PXErr_FileLocked = 4; { File is locked }
PXErr_FileNotFound = 5; { Could not find file }
{ table oriented errors }
const
PXErr_TableBusy = 118; { Table is busy }
PXErr_TableLocked = 119; { Table is locked }
PXErr_TableNotFound = 120; { Table was not found }
PXErr_TableOpen = 83; { Unable to perform operation }
{ on open table }
PXErr_TableIndexed = 94; { Table is indexed }
PXErr_TableNotIndexed = 95; { Table is not indexed }
PXErr_TableEmpty = 105; { Operation on empty table }
PXErr_TableWritePro = 22; { Table is write protected }
PXErr_TableCorrupted = 6; { Table is corrupted }
PXErr_TableFull = 128; { Table is full }
PXErr_TableSQL = 130; { Table is SQL replica }
PXErr_InsufRights = 21; { Insufficient password rights }
{ index oriented errors }
const
PXErr_XCorrupted = 7; { Primary index is corrupted }
PXErr_XOutOfDate = 8; { Primary index is out of date }
PXErr_XSortVersion = 13; { Sort for index different }
{ from table }
PXErr_SXCorrupted = 122; { Secondary index is corrupted }
PXErr_SXOutOfDate = 96; { Secondary index is out of date }
PXErr_SXNotFound = 121; { Secondary index was not found }
PXErr_SXOpen = 123; { Secondary index is already open }
PXErr_SXCantUpdate = 136; { Can't update table open on non-maintained secondary }
PXErr_RecTooBig = 125; { Record too big for index }
{ record oriented errors }
const
PXErr_RecDeleted = 50; { Another user deleted record }
PXErr_RecLocked = 9; { Record is locked }
PXErr_RecNotFound = 89; { Record was not found }
PXErr_KeyViol = 97; { Key violation }
PXErr_EndOfTable = 101; { End of table }
PXErr_StartOfTable = 102; { Start of table }
{ errors specific for Windows Engine DLL }
const
PXErr_TooManyClients = 131;
PXErr_ExceedsConfigLimits = 132;
PXErr_CantRemapFileHandle = 133;
{ resource errors }
const
PXErr_OutOfMem = 40; { Not enough memory to }
{ complete operation }
PXErr_OutOfDisk = 41; { Not enough disk space to }
{ complete operation }
PXErr_OutOfStack = 127; { Not enough stack space to }
{ complete operation }
PXErr_OutOfSwapBuf = 129; { Not enough swap buffer space to }
{ complete operation }
PXErr_OutOfFileHandles = 70; { No more file handles available }
PXErr_OutOfTableHandles = 72; { No more table handles available }
PXErr_OutOfRecHandles = 103; { No more record handles available }
PXErr_OutOfLockHandles = 111; { Too many locks on table }
PXErr_NoMoreTmpNames = 86; { No more temporary names }
{ available }
PXErr_TooManyPassw = 115; { Too many passwords specified }
{ invalid parameters to functions }
const
PXErr_TypeMismatch = 30; { Data type mismatch }
PXErr_OutOfRange = 31; { Argument out of range }
PXErr_InvParameter = 33; { Invalid argument }
PXErr_InvDate = 73; { Invalid date given }
PXErr_InvFieldHandle = 75; { Invalid field handle }
PXErr_InvRecHandle = 104; { Invalid record handle }
PXErr_InvTableHandle = 76; { Invalid table handle }
PXErr_InvLockHandle = 110; { Invalid lock handle }
PXErr_InvDirName = 114; { Invalid directory name }
PXErr_InvFileName = 108; { Invalid file name }
PXErr_InvTableName = 99; { Invalid table name }
PXErr_InvFieldName = 74; { Invalid field name }
PXErr_InvLockCode = 106; { Invalid lock code }
PXErr_InvUnlock = 109; { Invalid unlock }
PXErr_InvSortOrder = 112; { Invalid sort order table }
PXErr_InvPassw = 116; { Invalid password }
PXErr_InvNetType = 113; { Invalid net type (PXNetInit) }
PXErr_BufTooSmall = 117; { Buffer too small for result }
PXErr_StructDiffer = 81; { Table structures are different }
PXErr_InvEngineState = 79; { Previous fatal error; }
{ cannot proceed }
{ values for ShareMode argument to PXWinInit }
const
PXSingleClient = 0; { allow no other client access to Engine DLL }
PXExclusive = 1; { open all tables with FULL LOCK }
PXShared = 2; { open all tables with PREVENT FULL LOCK }
{ prototypes for engine functions }
{ declarations of sort order tables, used in PXSetDefaults }
const
SortOrderAscii = 'a'; { ASCII sort order }
SortOrderInt = 'i'; { international sort order }
SortOrderNorDan = 'n'; { Norwegian/Danish sort order }
SortOrderSwedFin = 's'; { Swedish/Finnish sort order }
{ INITIALIZATION AND FINALIZATION FUNCTIONS }
{ initialize Engine connection in Windows environment }
function PXWinInit(
clientName: PChar; { string containing name of application }
ShareMode: Integer { Share mode: PXSingleClient, }
{ PXExclusive, or PXShared }
): Integer;
{ exit and deallocate }
function PXExit: Integer;
{ overwrites internal default values }
function PXSetDefaults(
bufSize: Integer; { internal swap buffer size }
{ MinSwapSize..MaxSwapSize (8..256), }
{ default DefSwapSize (32) }
{ allocated at initialization time }
maxTables: Integer; { max number of tables open at a time }
{ range 1..MaxTableHandles , (1..64) }
{ default DefTableHandles (5) }
maxRecBufs: Integer; { max number of record buffers at a time}
{ range 1..MaxRecordHandles , (1..128) }
{ default DefRecordHandles (10) }
maxLocks: Integer; { max number of locks per table }
{ range 1..MaxLockHandles , (1..128) }
{ default DefLockHandles (32) }
maxFiles: Integer; { max number of file handles to use }
{ range MinFileHandles..MaxFileHandles }
{ default DefFileHandles (10) }
sortOrder: Char { code for sort order table defined }
{ internally in the Engine : }
{ SortOrderAscii/SortOrderInt/ }
{ SortOrderNorDan/SortOrderSwedFin }
{ default : SortOrderAscii }
): Integer;
{ returns current default settings }
function PXGetDefaults(
var swapSize: Integer; { returns internal swap buffer size }
var maxTables: Integer; { returns max number of tables at a time }
var maxRecBufs: Integer; { returns max number of record buffers }
var maxLocks: Integer; { returns max number of locks per table }
var maxFiles: Integer; { returns max number of file handles to use }
var sortTable: Char { returns code indicating default sort table }
): Integer;
{ enables/disables internal hardware error handler }
function PXSetHWHandler(
hwHandler: Bool { enable(True) / disable (False) }
): Integer; { default True }
{ UTILITY FUNCTIONS }
function IsBlankDouble(x: Double): Bool;
procedure BlankDouble(var x: Double);
{ TABLE FUNCTIONS }
{ open table for access, returning table handle }
function PXTblOpen(
tblName: PChar; { name of table to open }
var tblHandle: TableHandle; { returns handle for opened table }
indexID: Integer; { =0 mastertable else indexnumber }
saveEveryChange: Bool { save each record as it is changed }
{ don't buffer changes }
): Integer;
{ close access to table }
function PXTblClose(
tblHandle: TableHandle { tblHandle of table to close }
): Integer;
{ create empty table }
function PXTblCreate(
tblName: PChar; { name of table to create }
nFields: Integer; { number of fields in table }
var fields; { field names }
var types { field types (N, S..) }
): Integer;
{ clear table for records }
function PXTblEmpty(
tblName: PChar { name of table to empty }
): Integer;
{ delete table and its family }
function PXTblDelete(
tblName: PChar { name of table to delete }
): Integer;
{ copy table and its family }
function PXTblCopy(
fromName: PChar; { source table of copy }
toName: PChar { destination table of copy }
): Integer;
{ rename table and its family }
function PXTblRename(
fromName: PChar; { source table of copy }
toName: PChar { destination table of copy }
): Integer;
{ add records from one table to another table }
function PXTblAdd(
srcName: PChar; { source table of add }
destName: PChar { destination table of add }
): Integer;
{ RECORD FUNCTIONS }
{ insert record buffer in database (as last record if Heap) }
function PXRecAppend(
tblHandle: TableHandle; { table to append record to }
recHandle: RecordHandle { record to append }
): Integer;
{ insert record buffer in database (before current if Heap) }
function PXRecInsert(
tblHandle: TableHandle; { table to insert record into }
recHandle: RecordHandle { record to insert }
): Integer;
{ updates current record in database with contents of the record buffer }
function PXRecUpdate(
tblHandle: TableHandle; { table to update record into }
recHandle: RecordHandle { changed record to post }
): Integer;
{ delete current record in table }
function PXRecDelete(
tblHandle: TableHandle { table to delete record in }
): Integer;
{ creates a record buffer for a table }
function PXRecBufOpen(
tblHandle: TableHandle; { table to create buffer for }
var recHandle: RecordHandle { returns handle to record buffer }
): Integer;
{ deletes a record buffer for a table }
function PXRecBufClose(
recHandle: RecordHandle { record buffer to remove }
): Integer;
{ clears the record buffer (to blanks) }
function PXRecBufEmpty(
recHandle: RecordHandle { record buffer to clear }
): Integer;
{ copy record from a record buffer to another (compatible) record buffer }
function PXRecBufCopy(
fromHandle: RecordHandle; { record buffer to copy from }
toHandle: RecordHandle { record buffer to copy to }
): Integer;
{ gets the current record from the database into the record buffer }
function PXRecGet(
tblHandle: TableHandle; { table to get record from }
recHandle: RecordHandle { record buffer to put record in }
): Integer;
{ FIELD FUNCTIONS }
{ put short value into N/$/S field in record buffer }
function PXPutShort(
recHandle: RecordHandle; { record buffer to put value in }
fldHandle: FieldHandle; { field in record }
value: Integer { value to put }
): Integer;
{ put Double value into N/$/S field in record buffer }
function PXPutDoub(
recHandle: RecordHandle; { record buffer to put value in }
fldHandle: FieldHandle; { field in record }
value: Double { value to put }
): Integer;
{ put LongInt value into N/$/S field in record buffer }
function PXPutlong(
recHandle: RecordHandle; { record buffer to put value in }
fldHandle: FieldHandle; { field in record }
value: LongInt { value to put }
): Integer;
{ put string into Alpha field in record buffer }
function PXPutAlpha(
recHandle: RecordHandle; { record buffer to put value in }
fldHandle: FieldHandle; { field in record }
value: PChar { value to put }
): Integer;
{ put LongInt value into date field (encoded value) in record buffer }
function PXPutDate(
recHandle: RecordHandle; { record buffer to put value in }
fldHandle: FieldHandle; { field in record }
value: Date { value to put }
): Integer;
{ put blank value into field in record buffer }
function PXPutBlank(
recHandle: RecordHandle; { record buffer to put blank in }
fldHandle: FieldHandle { field in record }
): Integer;
{ get value from N/$/S field in record buffer, into short }
function PXGetShort(
recHandle: RecordHandle; { record buffer to get value from }
fldHandle: FieldHandle; { field to get value from }
var value: Integer { returns value }
): Integer;
{ get value from N/$/S field in record buffer, into Double }
function PXGetDoub(
recHandle: RecordHandle; { record buffer to get value from }
fldHandle: FieldHandle; { field to get value from }
var value: Double { returns value }
): Integer;
{ get value from N/$/S field in record buffer, into LongInt }
function PXGetlong(
recHandle: RecordHandle; { record buffer to get value from }
fldHandle: FieldHandle; { field to get value from }
var value: LongInt { returns value }
): Integer;
{ get string from alpha field in record buffer }
function PXGetAlpha(
recHandle: RecordHandle; { record buffer to get value from }
fldHandle: FieldHandle; { field to get value from }
bufSize: Integer; { size of return buffer }
dest: PChar { return buffer }
): Integer;
{ get value from date field in record buffer, into LongInt (encoded value) }
function PXGetDate(
recHandle: RecordHandle; { record buffer to get value from }
fldHandle: FieldHandle; { field to get value from }
var value: Date { returns value }
): Integer;
{ is value in specified field in record buffer a blank? }
function PXFldBlank(
recHandle: RecordHandle; { record to test value in }
fldHandle: FieldHandle; { field to test }
var Blank: Bool { returns True/False }
): Integer;
{ move to record with specified record number }
function PXRecGoto(
tblHandle: TableHandle; { tblHandle of table to move in }
recNum: RecordNumber { record number to move to }
): Integer;
{ move to first record in table }
function PXRecFirst(
tblHandle: TableHandle { table to move in }
): Integer;
{ move to last record in table }
function PXRecLast(
tblHandle: TableHandle { table to move in }
): Integer;
{ move to next record in table }
function PXRecNext(
tblHandle: TableHandle { table to move in }
): Integer;
{ move to previous record in table }
function PXRecPrev(
tblHandle: TableHandle { table to move in }
): Integer;
{ INDEX FUNCTIONS }
{ add a primary or secondary (maintained/nonmaintained) index }
function PXKeyAdd(
tblName: PChar; { name of table to add index for }
nFlds: Integer; { number of fields in index }
var fldHandles; { array of field numbers in index }
mode: Integer { type of index to create }
{ PRIMARY/SECONDARY/INCSECONDARY }
): Integer;
{ delete an index for a table (primary/secondary) }
function PXKeyDrop(
tblName: PChar; { name of table to delete index for }
indexID: Integer { 0 if primary key, else field number }
{ of secondary index }
): Integer;
{ DATE FUNCTIONS }
{ decodes a date value stored in the Paradox format }
function PXDateDecode(
aDate: Date; { LongInt value to decode }
var mo: Integer; { decoded month value }
var da: Integer; { decoded date value }
var yr: Integer { decoded year value }
): Integer;
{ encodes a date value to a LongInt value in Paradox format }
function PXDateEncode(
mo, { month value to encode }
da, { date value to encode }
yr: Integer; { year value to encode }
var aDate: Date { encoded date value }
): Integer;
{ SEARCH FUNCTIONS }
{ Searches a table for a given (sub) key }
function PXSrchKey(
tblHandle: TableHandle; { table to search in }
recHandle: RecordHandle; { record buffer containing key to find }
nFlds, { number of fields in key }
mode: Integer { searching from first/next record }
): Integer;
function PXSrchFld(
tblHandle: TableHandle; { table to search in }
recHandle: RecordHandle; { record buffer containing field to find }
fldHandle: FieldHandle; { field number to search on }
mode: Integer { searching from first/next record }
): Integer;
{ PASSWORD FUNCTIONS }
{ checks if table is encrypted }
function PXTblProtected(
tblName: PChar; { name of table to check }
var Protected: Bool { returns True/False }
): Integer;
{ enters a password to the Engine }
function PXPswAdd(
password: PChar { password to enter into system }
): Integer;
{ deletes a password previously entered }
function PXPswDel(
password: PChar { password to remove from system }
): Integer;
{ encrypt a table and make it password protected }
function PXTblEncrypt(
tblName: PChar; { name of table to encrypt }
password: PChar { password for encrypted table }
): Integer;
{ decrypt a table, password must already have been entered }
function PXTblDecrypt(
tblName: PChar { name of table to decrypt }
): Integer;
{ INFORMATIONAL FUNCTIONS }
{ checks if table exists }
function PXTblExist(
tblName: PChar; { name of table to check }
var Exist: Bool { returns TRUE/FALSE }
) : Integer;
{ returns table name corresponding to a table handle }
function PXTblName(
tblHandle: TableHandle; { table to return name of }
bufSize: Integer; { size of return buffer }
tblName: PChar { name of table, without extension }
): Integer;
{ returns record number of current record in table }
function PXRecNum(
tblHandle: TableHandle; { table to get record number from }
var recNum: RecordNumber { returns record number }
): Integer;
{ returns number of records in table }
function PXTblNRecs(
tblHandle: TableHandle; { table to get number of records from }
var nRecs: RecordNumber { returns number of records }
): Integer;
{ returns number of fields in a record }
function PXRecNFlds(
tblHandle: TableHandle; { table to get number of fields from }
var nFlds: Integer { returns number of fields in a record }
): Integer;
{ return number of fields in key for table }
function PXKeyNFlds(
tblHandle: TableHandle; { table to get key size for }
var nKeyFlds: Integer { returns number of fields in key }
): Integer;
{ returns field number of a given field name in a table }
function PXFldHandle(
tblHandle: TableHandle; { table to get field number from }
fieldName: PChar; { name of field in table }
var fldHandle: FieldHandle { returns field number }
): Integer;
{ returns field type of a given field in a table }
function PXFldType(
tblHandle: TableHandle; { table to get field type from }
fldHandle: FieldHandle; { field number of field in table }
bufSize: Integer; { size of return buffer }
fldType: PChar { field type of field as string }
): Integer;
{ returns field name of a given field in a table }
function PXFldName(
tblHandle: TableHandle; { table to get field name from }
fldHandle: FieldHandle; { field number of field in table }
bufSize: Integer; { size of return buffer }
fldName: PChar { returns name of field }
): Integer;
{ MISCELLANEOUS FUNCTIONS }
{ sets maximum size of tables created with PXTblCreat() }
function PXTblMaxSize(
maxsize: Integer { maximum size of table }
{ 64/128/256 (Megabytes) }
): Integer;
{ saves all buffered changes to disk }
function PXSave: Integer;
{ CONCURRENCY FUNCTIONS }
{ can be used only if PXNetInit() or PXWinInit() was successful }
{ returns name of user as known on network }
function PXNetUserName(
bufSize: Integer; { size of return buffer }
userName: PChar { returns user name }
): Integer;
{ locks a file with specified lock (general function) }
function PXNetFileLock(
fileName: PChar; { name of file to lock }
lockType: Integer { type of lock to put on file }
{ (FL, WL, PFL, PWL) }
): Integer;
{ unlocks a file with specified lock (general function) }
function PXNetFileUnlock(
fileName: PChar; { name of file to unlock }
lockType: Integer { type of lock to remove from file }
{ (FL, WL, PFL, PWL) }
): Integer;
{ locks an open table with specified lock }
function PXNetTblLock(
tblHandle: TableHandle; { table to lock }
lockType: Integer { type of lock to put on table }
{ (FL, WL, PFL, PWL) }
): Integer;
{ unlocks an open table with specified lock }
function PXNetTblUnlock(
tblHandle: TableHandle; { table to unlock }
lockType: Integer { type of lock to remove from table }
{ (FL, WL, PFL, PWL) }
): Integer;
{ locks the current record in a table }
function PXNetRecLock(
tblHandle: TableHandle; { table to lock record in }
var lckHandle: LockHandle { returns handle to lock }
): Integer;
{ unlocks record associated with lock handle in the table }
function PXNetRecUnlock(
tblHandle: TableHandle; { table to unlock record in }
lckHandle: LockHandle { lock handle of record to unlock }
): Integer;
{ checks if current record in table is locked (by any user) }
function PXNetRecLocked(
tblHandle: TableHandle; { table to check record in }
var Locked: Bool { returns True/False }
): Integer;
{ moves to the record in the table associated with the lock handle }
function PXNetRecGotoLock(
tblHandle: TableHandle; { table to move in }
lckHandle: LockHandle { lock handle to record }
): Integer;
{ checks if table was changed by other user since last refresh }
function PXNetTblChanged(
tblHandle: TableHandle; { table to test }
var Changed: Bool { returns True/False }
): Integer;
{ forces a refresh of a table if it was changed by another user }
function PXNetTblRefresh(
tblHandle: TableHandle { table to refresh }
): Integer;
{ ERROR FUNCTIONS }
{ returns error text associated with the error number }
function PXErrMsg(
errCode: Integer { errcode to return text for }
): PChar;
{ returns name of user causing a locking error }
function PXNetErrUser(
bufSize: Integer; { size of return buffer }
userName: PChar { returns user name }
): Integer;
implementation
function PXExit; external 'PXENGWIN' index 4;
function PXSetDefaults; external 'PXENGWIN' index 5;
function PXGetDefaults; external 'PXENGWIN' index 6;
function PXSetHWHandler; external 'PXENGWIN' index 7;
function PXTblOpen; external 'PXENGWIN' index 8;
function PXTblClose; external 'PXENGWIN' index 9;
function PXTblCreate; external 'PXENGWIN' index 10;
function PXTblEmpty; external 'PXENGWIN' index 11;
function PXTblDelete; external 'PXENGWIN' index 12;
function PXTblCopy; external 'PXENGWIN' index 13;
function PXTblRename; external 'PXENGWIN' index 14;
function PXTblAdd; external 'PXENGWIN' index 15;
function PXRecAppend; external 'PXENGWIN' index 16;
function PXRecInsert; external 'PXENGWIN' index 17;
function PXRecUpdate; external 'PXENGWIN' index 18;
function PXRecBufOpen; external 'PXENGWIN' index 19;
function PXRecBufClose; external 'PXENGWIN' index 20;
function PXRecBufEmpty; external 'PXENGWIN' index 21;
function PXRecBufCopy; external 'PXENGWIN' index 22;
function PXRecGet; external 'PXENGWIN' index 23;
function PXPutShort; external 'PXENGWIN' index 24;
function PXPutDoub; external 'PXENGWIN' index 25;
function PXPutLong; external 'PXENGWIN' index 26;
function PXPutAlpha; external 'PXENGWIN' index 27;
function PXPutDate; external 'PXENGWIN' index 28;
function PXPutBlank; external 'PXENGWIN' index 29;
function PXGetShort; external 'PXENGWIN' index 30;
function PXGetDoub; external 'PXENGWIN' index 31;
function PXGetLong; external 'PXENGWIN' index 32;
function PXGetAlpha; external 'PXENGWIN' index 33;
function PXGetDate; external 'PXENGWIN' index 34;
function PXFldBlank; external 'PXENGWIN' index 35;
function PXRecGoto; external 'PXENGWIN' index 36;
function PXRecFirst; external 'PXENGWIN' index 37;
function PXRecLast; external 'PXENGWIN' index 38;
function PXRecNext; external 'PXENGWIN' index 39;
function PXRecPrev; external 'PXENGWIN' index 40;
function PXRecDelete; external 'PXENGWIN' index 41;
function PXKeyAdd; external 'PXENGWIN' index 42;
function PXKeyDrop; external 'PXENGWIN' index 43;
function PXDateDecode; external 'PXENGWIN' index 44;
function PXDateEncode; external 'PXENGWIN' index 45;
function PXSrchKey; external 'PXENGWIN' index 46;
function PXSrchFld; external 'PXENGWIN' index 47;
function PXTblProtected; external 'PXENGWIN' index 48;
function PXPswAdd; external 'PXENGWIN' index 49;
function PXPswDel; external 'PXENGWIN' index 50;
function PXTblEncrypt; external 'PXENGWIN' index 51;
function PXTblDecrypt; external 'PXENGWIN' index 52;
function PXTblExist; external 'PXENGWIN' index 53;
function PXTblName; external 'PXENGWIN' index 54;
function PXRecNum; external 'PXENGWIN' index 55;
function PXTblNRecs; external 'PXENGWIN' index 56;
function PXRecNFlds; external 'PXENGWIN' index 57;
function PXKeyNFlds; external 'PXENGWIN' index 58;
function PXFldHandle; external 'PXENGWIN' index 59;
function PXFldType; external 'PXENGWIN' index 60;
function PXFldName; external 'PXENGWIN' index 61;
function PXTblMaxSize; external 'PXENGWIN' index 62;
function PXSave; external 'PXENGWIN' index 63;
function PXNetUserName; external 'PXENGWIN' index 64;
function PXNetFileLock; external 'PXENGWIN' index 65;
function PXNetFileUnlock; external 'PXENGWIN' index 66;
function PXNetTblLock; external 'PXENGWIN' index 67;
function PXNetTblUnlock; external 'PXENGWIN' index 68;
function PXNetRecLock; external 'PXENGWIN' index 69;
function PXNetRecUnlock; external 'PXENGWIN' index 70;
function PXNetRecLocked; external 'PXENGWIN' index 71;
function PXNetRecGotoLock; external 'PXENGWIN' index 72;
function PXNetTblChanged; external 'PXENGWIN' index 73;
function PXNetTblRefresh; external 'PXENGWIN' index 74;
function PXErrMsg; external 'PXENGWIN' index 75;
function PXNetErrUser; external 'PXENGWIN' index 76;
function PXWinInit; external 'PXENGWIN' index 84;
procedure BlankDouble; external 'PXENGWIN' index 85;
function IsBlankDouble; external 'PXENGWIN' index 86;
end.