Is anybody using Cheetah in 4.1? - now 4.2?

Everything else that doesn't fall into one of the other PB categories.
User avatar
Rook Zimbabwe
Addict
Addict
Posts: 4322
Joined: Tue Jan 02, 2007 8:16 pm
Location: Cypress TX
Contact:

Is anybody using Cheetah in 4.1? - now 4.2?

Post by Rook Zimbabwe »

OK I have Cheetah working. Just cannot figure out how to pass a statement to th server... I cannot locate a commands list for Cheetah. Does anybody know where docs might be found?
Last edited by Rook Zimbabwe on Fri Jul 18, 2008 5:53 am, edited 1 time in total.
Binarily speaking... it takes 10 to Tango!!!

Image
http://www.bluemesapc.com/
User avatar
electrochrisso
Addict
Addict
Posts: 989
Joined: Mon May 14, 2007 2:13 am
Location: Darling River

Post by electrochrisso »

Looks like the latest zip for cheetah does not have the cheetah.chm file, but I could email you the version that does have it if you want.
User avatar
blueb
Addict
Addict
Posts: 1116
Joined: Sat Apr 26, 2003 2:15 pm
Location: Cuernavaca, Mexico

Post by blueb »

Here's the latest Cheetah download right from Paul Squires site:

http://planetsquires.com/cheetah.htm

I checked and the CHM file is in the zip. If you scroll down this page you'll see a couple of Purebasic support files.


--blueb

Note: A new "test" version "Cheetah 4" source is at Sourceforge:
http://sourceforge.net/project/showfile ... _id=183536
- It was too lonely at the top.

System : PB 6.21(x64) and Win 11 Pro (x64)
Hardware: AMD Ryzen 9 5900X w/64 gigs Ram, AMD RX 6950 XT Graphics w/16gigs Mem
User avatar
Rook Zimbabwe
Addict
Addict
Posts: 4322
Joined: Tue Jan 02, 2007 8:16 pm
Location: Cypress TX
Contact:

Post by Rook Zimbabwe »

Cool thanks! 8)
Binarily speaking... it takes 10 to Tango!!!

Image
http://www.bluemesapc.com/
Pureabc
User
User
Posts: 76
Joined: Mon Jan 16, 2006 1:11 am

cheetah in PB4.2

Post by Pureabc »

I am updating an older program to PB4.2, but can't seem to get cheetah to work.

Here is a simple test program:

Code: Select all

;-Begin----------------------------------------------------------------- 

  IncludeFile "CheetahInc.pb" 

  ;-Occupy resources---------------------------------------------------- 

    xdbUseDLL() 

  ;-FileName------------------------------------------------------------ 

    FileName.s = "Example1.dbf" 

  ;-Create database----------------------------------------------------- 

    xdbCreate(FileName, "ID,N,9,0;NAME,C,50,0;VORNAME,C,50,0") 

  ;-Open database------------------------------------------------------- 

    hdb.l = xdbOpen(FileName, "") 

  ;-Add an index-------------------------------------------------------- 

    xdbCreateIndex("Name.idx", hdb, "NAME + VORNAME", #XDBTRUE) 

  ;-Open the index------------------------------------------------------ 

    hidx.l = xdbOpenIndex("Name.idx", hdb) 

  ;-Add 20 records with a name------------------------------------------ 

    For i = 1 To 20 
      xdbClearBuffer(hdb) 
      Loop.s = Str(i) 
      xdbAssignField(hdb, "ID", 0, Loop) 
      xdbAssignField(hdb, "NAME", 0, "Mustermann") 
      xdbAssignField(hdb, "VORNAME", 0, "Max") 
      xdbAppendRecord(hdb) 
    Next 

  ;-Change record 6 to 10 to another name------------------------------- 

    For i = 6 To 10 
      xdbClearBuffer(hdb) 
      xdbGetRecord(hdb, i) 
      xdbAssignField(hdb, "NAME", 0, "Musterfrau") 
      xdbAssignField(hdb, "VORNAME", 0, "Susan") 
      xdbPutRecord(hdb, i) 
    Next 

  ;-Delete records 4 To 7----------------------------------------------- 

    For i = 4 To 7 
      xdbDeleteRecord(hdb, i) 
    Next 
    xdbPack(hdb) 

  ;-Read records 1 To 10 And print-------------------------------------- 

    OpenConsole() 

      For i = 1 To 10 
        xdbClearBuffer(hdb) 
        xdbGetRecord(hdb, i) 
        PrintN("ID: " + xdbFieldValue(hdb, "ID", 0)) 
        PrintN("Name: " + xdbFieldValue(hdb, "NAME", 0)) 
        PrintN("Vorname: " + xdbFieldValue(hdb, "VORNAME", 0)) 
      Next 

      PrintN("") 
      PrintN("Press any key to exit...") 
      Input() 

    CloseConsole() 

  ;-Close index--------------------------------------------------------- 

    xdbCloseIndex(hdb, hidx) 

  ;-Close database------------------------------------------------------ 

    xdbClose(hdb) 

  ;-Free resources------------------------------------------------------ 

    xdbFreeDLL() 

;-End------------------------------------------------------------------- 
End
Get an error : [Specified address is null!!]
And points to the following code in the wrapper:

Code: Select all

      Procedure.s xdbFieldValue(DBFhandle.l, FieldName.s, FieldNumber.l)
        ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBFIELDVALUE_Z", DBFhandle, @FieldName, FieldNumber))
      EndProcedure
Any body using cheetah2 in PB4.2?

Thanks.
User avatar
blueb
Addict
Addict
Posts: 1116
Joined: Sat Apr 26, 2003 2:15 pm
Location: Cuernavaca, Mexico

Post by blueb »

Hmm... works with my version of the wrapper. I think it's the latest version available.

Cheetah2.pbi

Code: Select all

; Begin-----------------------------------------------------------------
;
; Use Cheetah2.dll  with PureBASIC Wrapper
;
; Simply add this file to your program with the command:
; XIncludeFile "Cheetah2.pbi"
;
; Created by Bob Houle (blueb) & Stefan Schnell
; Last Modified... Feb 17, 2007
; ----------------------------------------------------------------------

  ; Global variables----------------------------------------------------

    Global xdbhDLL.l

   ; Cheetah database constants------------------------------------------

    Enumeration
      #XDBTRUE = 1
      #XDBFALSE = 0
      #MAX_INDEXES = 100
      #MAX_FIELDS = 1000
      #MAX_CONDITIONS = 50
      #MAX_INDEXKEYS = 6
      #MAX_CHARFIELD_SIZE = 256
      #MAX_NUMFIELD_SIZE = 20
      #ENCRYPT_NONE = 0
      #ENCRYPT_RC4 = 1
      #ENCRYPT_KEYEDXOR = 2
      #ENCRYPT_SUPERSCRAMBLE = 3
      #QUERY_AND = 1
      #QUERY_OR = 2
      #EQUAL_TO = 1
      #NOT_EQUAL_TO = 2
      #LESS_THAN = 3
      #GREATER_THAN = 4
      #LESS_THAN_EQUAL_TO = 5
      #GREATER_THAN_EQUAL_TO = 6
      #CONTAINS = 7
      #BETWEEN = 8
      #SUM = 9
      #MINIMUM = 10
      #MAXIMUM = 11
      #AVERAGE = 12
      #WILDCARD = 13
      #SORT_ASCEND = 1
      #SORT_DESCEND = 0
      #XDBREADONLY = 0
      #XDBWRITEONLY = 1
      #XDBREADWRITE = 2
      #XDBDENYREADWRITE = 1
      #XDBDENYWRITE = 2
      #XDBDENYREAD = 3
      #XDBDENYNONE = 4
      #XDBUNIQUE_CONTINUE = 0
      #XDBUNIQUE_ERROR = 1
      ; Errors----------------------------------------------------------
        #FILE_ACCESS_ERROR = 4000
        #INVALID_DATE_FORMAT = 4001
        #FILE_READ_ONLY = 4002
        #FILE_WRITE_ONLY = 4003
        #INVALID_FILENAME = 4004
        #ENGINE_NOT_INITIALIZED = 5000
        #FILE_NOT_FOUND = 5001
        #TOO_MANY_FILES_OPEN = 5002
        #INVALID_STRUCTURE = 5003
        #FILE_NOT_OPEN = 5004
        #RECORD_OUT_OF_RANGE = 5005
        #FIELD_NOT_FOUND = 5006
        #INVALID_FILE_HANDLE = 5007
        #INVALID_FIELD_LENGTH = 5008
        #DUPLICATE_ALIAS_NAME = 5009
        #INVALID_ACCESSMODE = 5010
        #INVALID_SHAREMODE = 5011
        #RECORD_BUSY = 5012
        #INCOMPATIBLE_MEMO_FIELDS = 5013
        #RECORDSIZE_EXCEEDED = 5014
        #INVALID_ENCRYPTIONKEY = 5015
        #DATABASE_NOT_OPEN = 7000
        #TOO_MANY_INDEXES_OPEN = 7002
        #INVALID_KEY_EXPRESSION = 7003
        #INDEX_NOT_OPEN = 7004
        #INDEX_UNIQUE_KEYS_ONLY = 7005
        #SEEK_NO_INDEX_SET = 7006
        #INDEX_NOT_FOUND = 7007
        #QUERY_NOT_GENERATED = 9000
        #QUERY_INVALID_FIELDNAME = 9001
        #QUERY_INVALID_COMPARISON = 9002
        #QUERY_MISSING_DELIMITERS = 9003
        #QUERY_MISSING_SEARCHSTRING = 9004
        #QUERY_TOO_MANY_EXPRESSIONS = 9005
        #QUERY_EXPECTED_NUMERIC_STRING = 9006
        #QUERY_ERROR_GETRECORD = 9007
        #QUERY_INVALID_HANDLE = 9008
        #QUERY_INVALID_JOINPHRASE = 9009
        #QUERY_NO_WILDCARD_FOUND = 9010
        #QUERY_INVALID_PARENTHESIS = 9011
        #DLL_EXPIRED = 99999
    EndEnumeration

  ; Cheetah database functions------------------------------------------

    ; ------------------------------------------------------------------

      Procedure.s xdbCToD(BASICdate.s)
        ProcedureReturn PeekS(CallFunction(xdbhDLL, "CTOD_Z", @BASICdate))
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.s xdbDToS(CheetahDate.s)
        ProcedureReturn PeekS(CallFunction(xdbhDLL, "DTOS_Z", @CheetahDate))
      EndProcedure

     ; ------------------------------------------------------------------

      Procedure.s xdbAddDate(StartDate.s, NumDays.l)
        ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBADDDATE_Z", @StartDate, NumDays))
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbAddField(FieldInfo.s)
        CallFunction(xdbhDLL, "XDBADDFIELD_Z", @FieldInfo)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbAddRecord(DBFhandle.l)
        CallFunction(xdbhDLL, "XDBADDRECORD_Z", DBFhandle)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.s xdbAlias(DBFhandle.l)
        ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBALIAS_Z", DBFhandle))
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbAppendRecord(DBFhandle.l)
        CallFunction(xdbhDLL, "XDBAPPENDRECORD_Z", DBFhandle)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.s xdbAppPath()
        ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBAPPPATH_Z"))
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbAssignField(DBFhandle.l, FieldName.s, FieldNumber.l, FieldString.s)
        CallFunction(xdbhDLL, "XDBASSIGNFIELD_Z", DBFhandle, @FieldName, FieldNumber, @FieldString)
      EndProcedure

    ; Currency: 8byte float---------------------------------------------
    ;
    ;  This function does not work with PureBASIC, because PureBASIC
    ;  supports only 4byte floating point
    ;
    ; ------------------------------------------------------------------

      ;Procedure xdbAssignFieldCUR(DBFhandle.l, FieldName.s, FieldNumber.l, CurrencyValue.f)
      ;  CallFunction(xdbhDLL, "XDBASSIGNFIELDCUR_Z", DBFhandle, @FieldName, FieldNumber, @CurrencyValue)
      ;EndProcedure

    ; Double: 8byte float-----------------------------------------------
    ;
    ;  This function does not work with PureBASIC, because PureBASIC
    ;  supports only 4byte floating point
    ;
    ; ------------------------------------------------------------------

      ;Procedure xdbAssignFieldDBL(DBFhandle.l, FieldName.s, FieldNumber.l, DoubleValue.f)
      ;  CallFunction(xdbhDLL, "XDBASSIGNFIELDDBL_Z", DBFhandle, @FieldName, FieldNumber, @DoubleValue)
      ;EndProcedure

    ; Integer: From -32768 to +32767------------------------------------

      Procedure xdbAssignFieldINT(DBFhandle.l, FieldName.s, FieldNumber.l, IntValue.w)
        CallFunction(xdbhDLL, "XDBASSIGNFIELDINT_Z", DBFhandle, @FieldName, FieldNumber, IntValue)
      EndProcedure

    ; Long: From -2147483648 to +2147483647-----------------------------

      Procedure xdbAssignFieldLNG(DBFhandle.l, FieldName.s, FieldNumber.l, LongValue.l)
        CallFunction(xdbhDLL, "XDBASSIGNFIELDLNG_Z", DBFhandle, @FieldName, FieldNumber, LongValue)
      EndProcedure

    ; Single: 4byte float-----------------------------------------------

      Procedure xdbAssignFieldSNG(DBFhandle.l, FieldName.s, FieldNumber.l, SingleValue.f)
        CallFunction(xdbhDLL, "XDBASSIGNFIELDSNG_Z", DBFhandle, @FieldName, FieldNumber, @SingleValue)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbAssignMemo(DBFhandle.l, FieldName.s, FieldNumber.l, MemAddress.l, StringLength.l)
        CallFunction(xdbhDLL, "XDBASSIGNMEMO_Z", DBFhandle, @FieldName, FieldNumber, MemAddress, StringLength)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbBOF(DBFhandle.l)
        ProcedureReturn CallFunction(xdbhDLL, "XDBBOF_Z", DBFhandle)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure _xdbClearBuffer(DBFhandle.l)
        CallFunction(xdbhDLL, "XDBCLEARBUFFER_Z", DBFhandle)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbClose(DBFhandle.l)
        CallFunction(xdbhDLL, "XDBCLOSE_Z", DBFhandle)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbCloseAllIndexes(DBFhandle.l)
        CallFunction(xdbhDLL, "XDBCLOSEALLINDEXES_Z", DBFhandle)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbCloseIndex(DBFhandle.l, idxHandle.l)
        CallFunction(xdbhDLL, "XDBCLOSEINDEX_Z", DBFhandle, idxHandle)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbCreate(FileName.s, FieldArray.s)
        CallFunction(xdbhDLL, "XDBCREATE_Z", @FileName, @FieldArray)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbCreateExtended(FileName.s, FieldArray.s, MemoBlockSize.l, Algorithm.l, EncryptionKey.s)
        CallFunction(xdbhDLL, "XDBCREATEEXTENDED_Z", @FileName, @FieldArray, MemoBlockSize, Algorithm, @EncryptionKey)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbCreateFields(DBFname.s)
        CallFunction(xdbhDLL, "XDBCREATEFIELDS_Z", @DBFname)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbCreateFieldsExtended(FileName.s, MemoBlockSize.l, Algorithm.l, EncryptionKey.s)
        CallFunction(xdbhDLL, "XDBCREATEFIELDSEXTENDED_Z", @FileName, MemoBlockSize, Algorithm, @EncryptionKey)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbCreateIndex(IndexFileName.s, DBFhandle.l, IndexExpression.s, Duplicates.l)
        CallFunction(xdbhDLL, "XDBCREATEINDEX_Z", @IndexFileName, DBFhandle, @IndexExpression, Duplicates)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbCreateQuery(DBFhandle.l)
        ProcedureReturn CallFunction(xdbhDLL, "XDBCREATEQUERY_Z", DBFhandle)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbDatabaseHandles(DBFileName.s, CheetahHandle.l, WindowsHandle.l)
        CallFunction(xdbhDLL, "XDBDATABASEHANDLES_Z", @DBFileName, CheetahHandle, WindowsHandle)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbDateToJulian(DateString.s)
        ProcedureReturn CallFunction(xdbhDLL, "XDBDATETOJULIAN_Z", @DateString)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbDaysApart(DateFrom.s, DateTo.s)
        ProcedureReturn CallFunction(xdbhDLL, "XDBDAYSAPART_Z", @DateFrom, @DateTo)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbDaysInMonth(Year.l, Month.l)
        ProcedureReturn CallFunction(xdbhDLL, "XDBDAYSINMONTH_Z", Year, Month)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbDebugMode(TrueFalse.l)
        CallFunction(xdbhDLL, "XDBDEBUGMODE_Z", TrueFalse)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbDeleted(DBFhandle.l, RecordNumber.l)
        ProcedureReturn CallFunction(xdbhDLL, "XDBDELETED_Z", DBFhandle, RecordNumber)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbDeleteRecord(DBFhandle.l, RecordNumber.l)
        CallFunction(xdbhDLL, "XDBDELETERECORD_Z", DBFhandle, RecordNumber)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbDestroyQuery(QueryHandle.l)
        CallFunction(xdbhDLL, "XDBDESTROYQUERY_Z", QueryHandle)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbEncryptionMethod(DBFhandle.l)
        ProcedureReturn CallFunction(xdbhDLL, "XDBENCRYPTIONMETHOD_Z", DBFhandle)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbEOF(DBFhandle.l)
        ProcedureReturn CallFunction(xdbhDLL, "XDBEOF_Z", DBFhandle)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbError()
        ProcedureReturn CallFunction(xdbhDLL, "XDBERROR_Z")
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbFailedLockInfo(DBFhandle.l, Reason.s, Username.s, Workstation.s, LockDate.s, LockTime.s)
        CallFunction(xdbhDLL, "XDBFAILEDLOCKINFO_Z", DBFhandle, @Reason, @Username, @Workstation, @LockDate, @LockTime)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbFieldCount(DBFhandle.l)
        ProcedureReturn CallFunction(xdbhDLL, "XDBFIELDCOUNT_Z", DBFhandle)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbFieldDecimals(DBFhandle.l, FieldNumber.l)
        ProcedureReturn CallFunction(xdbhDLL, "XDBFIELDDECIMALS_Z", DBFhandle, FieldNumber)
      EndProcedure

    ; ------------------------------------------------------------------


      Procedure xdbFieldInfo(DBFhandle.l, FieldNumber.l, FieldName.s, FieldType.s, FieldLength.l, FieldDecimals.l)
        ;CallFunction(xdbhDLL, "XDBFIELDINFO_Z", DBFhandle, FieldNumber, @FieldName, @FieldType, FieldLength, FieldDecimals)
         CallFunction(xdbhDLL, "XDBFIELDINFO_Z", DBFhandle, FieldNumber, @FieldName, @FieldType, @FieldLength, @FieldDecimals)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbFieldLength(DBFhandle.l, FieldNumber.l)
        ProcedureReturn CallFunction(xdbhDLL, "XDBFIELDLENGTH_Z", DBFhandle, FieldNumber)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.s xdbFieldName(DBFhandle.l, FieldNumber.l)
        ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBFIELDNAME_Z", DBFhandle, FieldNumber))
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbFieldNumber(DBFhandle.l, FieldName.s)
        ProcedureReturn CallFunction(xdbhDLL, "XDBFIELDNUMBER_Z", DBFhandle, @FieldName)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbFieldPadding(DBFhandle.l, TrueFalse.l)
        CallFunction(xdbhDLL, "XDBFIELDPADDING_Z", DBFhandle, TrueFalse)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.s xdbFieldType(DBFhandle.l, FieldNumber.l)
        ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBFIELDTYPE_Z", DBFhandle, FieldNumber))
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.s xdbFieldValue(DBFhandle.l, FieldName.s, FieldNumber.l)
        ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBFIELDVALUE_Z", DBFhandle, @FieldName, FieldNumber))
      EndProcedure

    ; Currency: 8byte float---------------------------------------------
    ;
    ;  This function does not work with PureBASIC, because PureBASIC
    ;  supports only 4byte floating point
    ;
    ; ------------------------------------------------------------------

      ;Procedure.f xdbFieldValueCUR(DBFhandle.l, FieldName.s, FieldNumber.l)
      ;  ProcedureReturn CallFunction(xdbhDLL, "XDBFIELDVALUECUR_Z", DBFhandle, @FieldName, FieldNumber)
      ;EndProcedure

    ; Double: 8byte float-----------------------------------------------
    ;
    ;  This function does not work with PureBASIC, because PureBASIC
    ;  supports only 4byte floating point
    ;
    ; ------------------------------------------------------------------

      ;Procedure.f xdbFieldValueDBL(DBFhandle.l, FieldName.s, FieldNumber.l)
      ;  ProcedureReturn CallFunction(xdbhDLL, "XDBFIELDVALUEDBL_Z", DBFhandle, @FieldName, FieldNumber)
      ;EndProcedure

    ; Integer: From -32768 to +32767------------------------------------

      Procedure.w xdbFieldValueINT(DBFhandle.l, FieldName.s, FieldNumber.l)
        ProcedureReturn CallFunction(xdbhDLL, "XDBFIELDVALUEINT_Z", DBFhandle, @FieldName, FieldNumber)
      EndProcedure

    ; Long: From -2147483648 to +2147483647-----------------------------

      Procedure.l xdbFieldValueLNG(DBFhandle.l, FieldName.s, FieldNumber.l)
        ProcedureReturn CallFunction(xdbhDLL, "XDBFIELDVALUELNG_Z", DBFhandle, @FieldName, FieldNumber)
      EndProcedure

    ; Single: 4byte float-----------------------------------------------

      Procedure.f xdbFieldValueSNG(DBFhandle.l, FieldName.s, FieldNumber.l)
        ProcedureReturn CallFunction(xdbhDLL, "XDBFIELDVALUESNG_Z", DBFhandle, @FieldName, FieldNumber)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbFlushDatabase(DBFhandle.l)
        CallFunction(xdbhDLL, "XDBFLUSHDATABASE_Z", DBFhandle)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbGetRecord(DBFhandle.l, RecordNumber.l)
        CallFunction(xdbhDLL, "XDBGETRECORD_Z", DBFhandle, RecordNumber)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbHtmlStripTag(QueryHandle.l, TrueFalse.l)
        CallFunction(xdbhDLL, "XDBHTMLSTRIPTAG_Z", QueryHandle, TrueFalse)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbIndexHandles(IndexFileName.s, CheetahHandle.l, WindowsHandle.l)
        CallFunction(xdbhDLL, "XDBINDEXHANDLES_Z", @IndexFileName, CheetahHandle, WindowsHandle)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbIsEditLock(DBFhandle.l, RecordNumber.l)
        ProcedureReturn CallFunction(xdbhDLL, "XDBISEDITLOCK_Z", DBFhandle, RecordNumber)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbIsEncrypted(DBFhandle.l)
        ProcedureReturn CallFunction(xdbhDLL, "XDBISENCRYPTED_Z", DBFhandle)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.s xdbJulianToDate(JulianNumber.l)
        ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBJULIANTODATE_Z", JulianNumber))
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbKeyCount(DBFhandle.l, idxHandle.l)
        ProcedureReturn CallFunction(xdbhDLL, "XDBKEYCOUNT_Z", DBFhandle, idxHandle)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.s xdbKeyExpression(DBFhandle.l, idxHandle.l)
        ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBKEYEXPRESSION_Z", DBFhandle, idxHandle))
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbKeyLength(DBFhandle.l, idxHandle.l)
        ProcedureReturn CallFunction(xdbhDLL, "XDBKEYLENGTH_Z", DBFhandle, idxHandle)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbKeyPosition(idxHandle.l, KeyPosition.l)
        ProcedureReturn CallFunction(xdbhDLL, "XDBKEYPOSITION_Z", idxHandle, KeyPosition)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbKeyUnique(DBFhandle.l, idxHandle.l)
        ProcedureReturn CallFunction(xdbhDLL, "XDBKEYUNIQUE_Z", DBFhandle, idxHandle)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbLastUpdated(DBFhandle.l, YearNr.l, MonthNr.l, DayNr.l)
        CallFunction(xdbhDLL, "XDBLASTUPDATED_Z", YearNr, MonthNr, DayNr)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbMemoValueAddr(DBFhandle.l, FieldName.s, FieldCode.l)
        ProcedureReturn CallFunction(xdbhDLL, "XDBMEMOVALUEADDR_Z", DBFhandle, @FieldName, FieldCode)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbMemoValueLen(DBFhandle.l, FieldName.s, FieldCode.l)
        ProcedureReturn CallFunction(xdbhDLL, "XDBMEMOVALUELEN_Z", DBFhandle, @FieldName, FieldCode)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.s xdbMKI(IntValue.w)
        ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBMKI_Z", IntValue))
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.s xdbMKL(LongValue.l)
        ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBMKL_Z", LongValue))
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbMoveFirst(DBFhandle.l, idxHandle.l)
        CallFunction(xdbhDLL, "XDBMOVEFIRST_Z", DBFhandle, idxHandle)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbMoveLast(DBFhandle.l, idxHandle.l)
        CallFunction(xdbhDLL, "XDBMOVELAST_Z", DBFhandle, idxHandle)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbMoveNext(DBFhandle.l, idxHandle.l)
        CallFunction(xdbhDLL, "XDBMOVENEXT_Z", DBFhandle, idxHandle)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbMovePrev(DBFhandle.l, idxHandle.l)
        CallFunction(xdbhDLL, "XDBMOVEPREV_Z", DBFhandle, idxHandle)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbMultiUser(TrueFalse.l, NumRetries.l, WaitTimes.l)
        CallFunction(xdbhDLL, "XDBMULTIUSER_Z", TrueFalse, NumRetries, WaitTimes)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.s xdbNameOfDay(DateCheck.s)
        ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBNAMEOFDAY_Z", @DateCheck))
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbOpen(FileName.s, EncryptionKey.s)
        ProcedureReturn CallFunction(xdbhDLL, "XDBOPEN_Z", @FileName, @EncryptionKey)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbOpenEx(FileName.s, AccessMode.l, ShareMode.l, EncryptionKey.s)
        ProcedureReturn CallFunction(xdbhDLL, "XDBOPENEX_Z", @FileName, AccessMode, ShareMode, @EncryptionKey)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbOpenIndex(IndexFilename.s, DBFhandle.l)
        ProcedureReturn CallFunction(xdbhDLL, "XDBOPENINDEX_Z", @IndexFilename, DBFhandle)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbPack(DBFhandle.l)
        CallFunction(xdbhDLL, "XDBPACK_Z", DBFhandle)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbPutRecord(DBFhandle.l, RecordNumber.l)
        CallFunction(xdbhDLL, "XDBPUTRECORD_Z", DBFhandle, @RecordNumber)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbQueryAVG(QueryHandle.l, FieldName.s)
        ProcedureReturn CallFunction(xdbhDLL, "XDBQUERYAVG_Z", QueryHandle, @FieldName)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbQueryCondition(QueryHandle.l, JoinPhrases.l, FieldName.s, Equality.l, vParameter1.s, vParameter2.s)
        CallFunction(xdbhDLL, "XDBQUERYCONDITION_Z", QueryHandle, JoinPhrases, @FieldName, Equality, @vParameter1, @vParameter2)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbQueryDistinct(QueryHandle.l, FieldName.s)
        CallFunction(xdbhDLL, "XDBQUERYDISTINCT_Z", QueryHandle, @FieldName)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbQueryExecute(QueryHandle.l)
        CallFunction(xdbhDLL, "XDBQUERYEXECUTE_Z", QueryHandle)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbQueryIndex(QueryHandle.l)
        CallFunction(xdbhDLL, "XDBQUERYINDEX_Z", QueryHandle)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbQueryMAX(QueryHandle.l, FieldName.s)
        ProcedureReturn CallFunction(xdbhDLL, "XDBQUERYMAX_Z", QueryHandle, @FieldName)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbQueryMIN(QueryHandle.l, FieldName.s)
        ProcedureReturn CallFunction(xdbhDLL, "XDBQUERYMIN_Z", QueryHandle, @FieldName)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbQuerySort(QueryHandle.l, FieldName.s, SortDirection.l)
        CallFunction(xdbhDLL, "XDBQUERYSORT_Z", QueryHandle, @FieldName, SortDirection)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbQuerySUM(QueryHandle.l, FieldName.s)
        ProcedureReturn CallFunction(xdbhDLL, "XDBQUERYSUM_Z", QueryHandle, @FieldName)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbRecallRecord(DBFhandle.l, RecordNumber.l)
        CallFunction(xdbhDLL, "XDBRECALLRECORD_Z", DBFhandle, RecordNumber)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.s xdbRecordBuffer(DBFhandle.l)
        ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBRECORDBUFFER_Z", DBFhandle))
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbRecordCount(DBFhandle.l)
        ProcedureReturn CallFunction(xdbhDLL, "XDBRECORDCOUNT_Z", DBFhandle)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbRecordNumber(DBFhandle.l)
        ProcedureReturn CallFunction(xdbhDLL, "XDBRECORDNUMBER_Z", DBFhandle)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.s xdbRegisteredTo()
        ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBREGISTEREDTO_Z"))
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbReindex(DBFhandle.l, idxHandle.l, UniqueContinueOrError.l)
        CallFunction(xdbhDLL, "XDBREINDEX_Z", DBFhandle, idxHandle, UniqueContinueOrError)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbReindexAll(DBFhandle.l, UniqueContinueOrError.l)
        CallFunction(xdbhDLL, "XDBREINDEXALL_Z", DBFhandle, UniqueContinueOrError)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbRemoveEditLock(DBFhandle.l, Lock_Num.l)
        CallFunction(xdbhDLL, "XDBREMOVEEDITLOCK_Z", DBFhandle, Lock_Num)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbRemoveExclusiveLock(DBFhandle.l, Lock_Num.l)
        CallFunction(xdbhDLL, "XDBREMOVEEXCLUSIVELOCK_Z", DBFhandle, Lock_Num)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbResetError()
        CallFunction(xdbhDLL, "XDBRESETERROR_Z")
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbSeek(DBFhandle.l, idxHandle.l, KeyToLookFor.s)
        ProcedureReturn CallFunction(xdbhDLL, "XDBSEEK_Z", DBFhandle, idxHandle, @KeyToLookFor)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbSeekNext(DBFhandle.l, idxHandle.l, KeyToLookFor.s)
        ProcedureReturn CallFunction(xdbhDLL, "XDBSEEKNEXT_Z", DBFhandle, idxHandle, @KeyToLookFor)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbSeekPartial(DBFhandle.l, idxHandle.l, PartialKeyToLookFor.s)
        ProcedureReturn CallFunction(xdbhDLL, "XDBSEEKPARTIAL_Z", DBFhandle, idxHandle, @PartialKeyToLookFor)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbSeekPartialNext(DBFhandle.l, idxHandle.l, PartialKeyToLookFor.s)
        ProcedureReturn CallFunction(xdbhDLL, "XDBSEEKPARTIALNEXT_Z", DBFhandle, idxHandle, @PartialKeyToLookFor)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbSetAlias(DBFhandle.l, NewAliasName.s)
        CallFunction(xdbhDLL, "XDBSETALIAS_Z", DBFhandle, @NewAliasName)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbSetCallBack(hWnd.l)
        CallFunction(xdbhDLL, "XDBSETCALLBACK_Z", hWnd)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbSetEditLock(DBFhandle.l, RecordNumber.l)
        ProcedureReturn CallFunction(xdbhDLL, "XDBSETEDITLOCK_Z", DBFhandle, RecordNumber)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbSetExclusiveLock(DBFhandle.l)
        CallFunction(xdbhDLL, "XDBSETEXCLUSIVELOCK_Z", DBFhandle)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbSkipDeleted(DBFhandle.l, OnOff.l)
        CallFunction(xdbhDLL, "XDBSKIPDELETED_Z", DBFhandle, OnOff)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbSpeedAppend(DBFhandle.l, OnOff.l)
        CallFunction(xdbhDLL, "XDBSPEEDAPPEND_Z", DBFhandle, OnOff)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.s xdbTempFileName()
        ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBTEMPFILENAME_Z"))
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.s xdbTodaysDate()
        ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBTODAYSDATE_Z"))
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.l xdbValidDate(DateCheck.s)
        ProcedureReturn CallFunction(xdbhDLL, "XDBVALIDDATE_Z", @DateCheck)
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure.s xdbVersion()
        ProcedureReturn PeekS(CallFunction(xdbhDLL, "XDBVERSION_Z"))
      EndProcedure

    ; ------------------------------------------------------------------

      Procedure xdbZap(DBFhandle.l)
        CallFunction(xdbhDLL, "XDBZAP_Z", DBFhandle)
      EndProcedure

    ; Procedure xdbClearBuffer------------------------------------------
    ;
    ; Procedure to correct Cheetah xdbClearBuffer bug
    ; Thanks to Bruce Brown
    ;
    ; ------------------------------------------------------------------

      Procedure xdbClearBuffer(DBFhandle.l)
        _xdbClearBuffer(DBFhandle)
        For i = 1 To xdbFieldCount(DBFhandle)
          Select xdbFieldType(DBFhandle, i)
            Case "I" ; Integer
              xdbAssignFieldINT(DBFhandle, "", i, 0)
            Case "W" ; Long
              xdbAssignFieldLNG(DBFhandle, "", i, 0)
            Case "S" ; Single
              xdbAssignFieldSNG(DBFhandle, "", i, 0)
            ;Case "X" ; Double, not supported by PureBASIC
            ;  xdbAssignFieldDBL(DBFhandle, "", i, 0)
            ;Case "Y" ; Currency, not supported by PureBASIC
            ;  xdbAssignFieldCUR(DBFhandle, "", i, 0)
          EndSelect
        Next
      EndProcedure

  ; Procedure xdbUseDLL-------------------------------------------------
  ;
  ;  Procedure to load CHEETAH2.DLL permanently
  ;
  ; --------------------------------------------------------------------

    Procedure xdbUseDLL()
      xdbhDLL = OpenLibrary(#PB_Any, "CHEETAH2.DLL")
     EndProcedure

  ; Procedure xdbFreeDLL------------------------------------------------
  ;
  ;  Procedure to unload CHEETAH2.DLL after xdbUseDLL
  ;
  ; --------------------------------------------------------------------

    Procedure xdbFreeDLL()
      CloseLibrary(xdbhDLL)
    EndProcedure

  ; Procedure AnyErrors-------------------------------------------------
  ;
  ;  Returns the error number
  ;
  ; --------------------------------------------------------------------

    Procedure AnyErrors()
      ErrorReturn = xdbError()
      If ErrorReturn
        Select ErrorReturn
          ; System errors-----------------------------------------------
            Case #FILE_ACCESS_ERROR
              ErrorAns.s = "FILE ACCESS ERROR"
            Case #INVALID_DATE_FORMAT
              ErrorAns.s = "INVALID DATE FORMAT"
            Case #FILE_READ_ONLY
              ErrorAns.s = "FILE READ ONLY"
            Case #FILE_WRITE_ONLY
              ErrorAns.s = "FILE WRITE ONLY"
            Case #INVALID_FILENAME
              ErrorAns.s = "INVALID FILENAME"
          ; Database errors---------------------------------------------
            Case #ENGINE_NOT_INITIALIZED
              ErrorAns.s = "ENGINE NOT INITIALIZED"
            Case #FILE_NOT_FOUND
              ErrorAns.s = "FILE NOT FOUND"
            Case #TOO_MANY_FILES_OPEN
              ErrorAns.s = "TOO MANY FILES OPEN"
            Case #INVALID_STRUCTURE
              ErrorAns.s = "INVALID STRUCTURE"
            Case #FILE_NOT_OPEN
              ErrorAns.s = "FILE NOT OPEN"
            Case #RECORD_OUT_OF_RANGE
              ErrorAns.s = "RECORD OUT OF RANGE"
            Case #FIELD_NOT_FOUND
              ErrorAns.s = "FIELD NOT FOUND"
            Case #INVALID_FILE_HANDLE
              ErrorAns.s = "INVALID FILE HANDLE"
            Case #INVALID_FIELD_LENGTH
              ErrorAns.s = "INVALID FIELD LENGTH"
            Case #DUPLICATE_ALIAS_NAME
              ErrorAns.s = "DUPLICATE ALIAS NAME"
            Case #INVALID_ACCESSMODE
              ErrorAns.s = "INVALID ACCESSMODE"
            Case #INVALID_SHAREMODE
              ErrorAns.s = "INVALID SHAREMODE"
            Case #RECORD_BUSY
              ErrorAns.s = "RECORD BUSY"
            Case #INCOMPATIBLE_MEMO_FIELDS
              ErrorAns.s = "INCOMPATIBLE MEMO FIELDS"
            Case #RECORDSIZE_EXCEEDED
              ErrorAns.s = "RECORDSIZE EXCEEDED"
            Case #INVALID_ENCRYPTIONKEY
              ErrorAns.s = "INVALID ENCRYPTIONKEY"
          ; Index errors------------------------------------------------
            Case #DATABASE_NOT_OPEN
              ErrorAns.s = "DATABASE NOT OPEN"
            Case #TOO_MANY_INDEXES_OPEN
              ErrorAns.s = "TOO MANY INDEXES OPEN"
            Case #INVALID_KEY_EXPRESSION
              ErrorAns.s = "INVALID KEY EXPRESSION"
            Case #INDEX_NOT_OPEN
              ErrorAns.s = "INDEX NOT OPEN"
            Case #INDEX_UNIQUE_KEYS_ONLY
              ErrorAns.s = "INDEX UNIQUE KEYS ONLY"
            Case #SEEK_NO_INDEX_SET
              ErrorAns.s = "SEEK NO INDEX_SET"
            Case #INDEX_NOT_FOUND
              ErrorAns.s = "INDEX NOT FOUND"
          ; Query errors------------------------------------------------
            Case #QUERY_NOT_GENERATED
              ErrorAns.s = "QUERY NOT GENERATED"
            Case #QUERY_INVALID_FIELDNAME
              ErrorAns.s = "QUERY INVALID FIELDNAME"
            Case #QUERY_INVALID_COMPARISON
              ErrorAns.s = "QUERY INVALID COMPARISON"
            Case #QUERY_MISSING_DELIMITERS
              ErrorAns.s = "QUERY MISSING DELIMITERS"
            Case #QUERY_MISSING_SEARCHSTRING
              ErrorAns.s = "QUERY MISSING SEARCHSTRING"
            Case #QUERY_TOO_MANY_EXPRESSIONS
              ErrorAns.s = "QUERY TOO MANY EXPRESSIONS"
            Case #QUERY_EXPECTED_NUMERIC_STRING
              ErrorAns.s = "QUERY EXPECTED NUMERIC STRING"
            Case #QUERY_ERROR_GETRECORD
              ErrorAns.s = "QUERY ERROR GETRECORD"
            Case #QUERY_INVALID_HANDLE
              ErrorAns.s = "QUERY INVALID HANDLE"
            Case #QUERY_INVALID_JOINPHRASE
              ErrorAns.s = "QUERY INVALID JOINPHRASE"
            Case #QUERY_NO_WILDCARD_FOUND
              ErrorAns.s = "QUERY NO WILDCARD FOUND"
            Case #QUERY_INVALID_PARENTHESIS
              ErrorAns.s = "QUERY INVALID PARENTHESIS"
          ; DLL errors--------------------------------------------------
            Case #DLL_EXPIRED
              ErrorAns.s = "DLL has expired (unregistered users)"
          ; Now not define errors---------------------------------------
            Default
              ErrorAns.s = "Cheetah DLL Error: " + Str(ErrorReturn) + Chr(13) + Chr(10) + "Look at Cheetah help file for the actual error list"
        EndSelect
        MessageRequester("Cheetah DBF", ErrorAns, #MB_OK | #MB_ICONERROR)
        xdbResetError()
      EndIf
   EndProcedure

; End-------------------------------------------------------------------
- It was too lonely at the top.

System : PB 6.21(x64) and Win 11 Pro (x64)
Hardware: AMD Ryzen 9 5900X w/64 gigs Ram, AMD RX 6950 XT Graphics w/16gigs Mem
Pureabc
User
User
Posts: 76
Joined: Mon Jan 16, 2006 1:11 am

Post by Pureabc »

blueb,

I tried your version of Cheetah2.pbi, and it is working now.

Thanks.
User avatar
ts-soft
Always Here
Always Here
Posts: 5756
Joined: Thu Jun 24, 2004 2:44 pm
Location: Berlin - Germany

Post by ts-soft »

Here are a version for PB4 and above with prototype and so on:

Code: Select all

; ----------------------------------------------------------------------------------------------------
;{ EQUATES - General And Error Codes
; ----------------------------------------------------------------------------------------------------
#XDBTRUE                       = 1
#XDBFALSE                      = 0
#MAX_INDEXES                   = 100
#MAX_FIELDS                    = 1000
#MAX_CONDITIONS                = 50
#MAX_INDEXKEYS                 = 6
#MAX_CHARFIELD_SIZE            = 256
#MAX_NUMFIELD_SIZE             = 20
#ENCRYPT_NONE                  = 0
#ENCRYPT_RC4                   = 1
#ENCRYPT_KEYEDXOR              = 2
#ENCRYPT_SUPERSCRAMBLE         = 3
#QUERY_AND                     = 1
#QUERY_OR                      = 2
#EQUAL_TO                      = 1
#NOT_EQUAL_TO                  = 2
#LESS_THAN                     = 3
#GREATER_THAN                  = 4
#LESS_THAN_EQUAL_TO            = 5
#GREATER_THAN_EQUAL_TO         = 6
#CONTAINS                      = 7
#BETWEEN                       = 8
#SUM                           = 9
#MINIMUM                       = 10
#MAXIMUM                       = 11
#AVERAGE                       = 12
#WILDCARD                      = 13
#SORT_ASCEND                   = 1
#SORT_DESCEND                  = 0
#XDBREADONLY                   = 0
#XDBWRITEONLY                  = 1
#XDBREADWRITE                  = 2
#XDBDENYREADWRITE              = 1
#XDBDENYWRITE                  = 2
#XDBDENYREAD                   = 3
#XDBDENYNONE                   = 4
#XDBUNIQUE_CONTINUE            = 0
#XDBUNIQUE_ERROR               = 1
#FILE_ACCESS_ERROR             = 4000
#INVALID_DATE_FORMAT           = 4001
#FILE_READ_ONLY                = 4002
#FILE_WRITE_ONLY               = 4003
#INVALID_FILENAME              = 4004
#ENGINE_NOT_INITIALIZED        = 5000
#FILE_NOT_FOUND                = 5001
#TOO_MANY_FILES_OPEN           = 5002
#INVALID_STRUCTURE             = 5003
#FILE_NOT_OPEN                 = 5004
#RECORD_OUT_OF_RANGE           = 5005
#FIELD_NOT_FOUND               = 5006
#INVALID_FILE_HANDLE           = 5007
#INVALID_FIELD_LENGTH          = 5008
#DUPLICATE_ALIAS_NAME          = 5009
#INVALID_ACCESSMODE            = 5010
#INVALID_SHAREMODE             = 5011
#RECORD_BUSY                   = 5012
#INCOMPATIBLE_MEMO_FIELDS      = 5013
#RECORDSIZE_EXCEEDED           = 5014
#INVALID_ENCRYPTIONKEY         = 5015
#DATABASE_NOT_OPEN             = 7000
#TOO_MANY_INDEXES_OPEN         = 7002
#INVALID_KEY_EXPRESSION        = 7003
#INDEX_NOT_OPEN                = 7004
#INDEX_UNIQUE_KEYS_ONLY        = 7005
#SEEK_NO_INDEX_SET             = 7006
#INDEX_NOT_FOUND               = 7007
#QUERY_NOT_GENERATED           = 9000
#QUERY_INVALID_FIELDNAME       = 9001
#QUERY_INVALID_COMPARISON      = 9002
#QUERY_MISSING_DELIMITERS      = 9003
#QUERY_MISSING_SEARCHSTRING    = 9004
#QUERY_TOO_MANY_EXPRESSIONS    = 9005
#QUERY_EXPECTED_NUMERIC_STRING = 9006
#QUERY_ERROR_GETRECORD         = 9007
#QUERY_INVALID_HANDLE          = 9008
#QUERY_INVALID_JOINPHRASE      = 9009
#QUERY_NO_WILDCARD_FOUND       = 9010
#QUERY_INVALID_PARENTHESIS     = 9011
;}
; ----------------------------------------------------------------------------------------------------
;{ DATABASE ROUTINES - Creation/Opening/Closing
; ----------------------------------------------------------------------------------------------------
Prototype   xdbCreate(FileName.p-ascii, AllFields.p-ascii)
Prototype   xdbCreateExtended(FileName.p-ascii, AllFields.p-ascii, MemoBlockSize.l, Algorithm.l, EncryptionKey.p-ascii)
Prototype.l xdbOpen(FileName.p-ascii, EncryptionKey.p-ascii = 0)
Prototype.l xdbOpenEX(FileName.p-ascii,  AccessMode.l, ShareMode.l, EncryptionKey.p-ascii = 0)
Prototype.l xdbAlias(DBFhandle.l)
Prototype   xdbSetAlias(DBFhandle.l, NewAliasName.p-ascii)
Prototype   xdbCreateFields(FileName.p-ascii)
Prototype   xdbCreateFieldsExtended(FileName.p-ascii, MemoBlockSize.l, Algorithm.l, EncryptionKey.p-ascii = 0)
Prototype   xdbAddField(FieldInfo.p-ascii)
Prototype   xdbClose(DBFhandle.l)
Prototype   xdbCloseAllIndexes(DBFhandle.l)
;}
; ----------------------------------------------------------------------------------------------------
;{ DATABASE ROUTINES - MultiUser & Locking
; ----------------------------------------------------------------------------------------------------
Prototype   xdbMultiUser(TrueFalse.l, NumRetries.l, WaitTime.l)
Prototype   xdbFailedLockInfo(DBFhandle.l, *Reason.p-ascii, *Username.p-ascii, *Workstation.p-ascii, *LockDate.p-ascii, *LockTime.p-ascii)
Prototype.l xdbSetExclusiveLock(DBFhandle.l)
Prototype   xdbRemoveExclusiveLock(DBFhandle.l, LOCK_NUM.l)
Prototype.l xdbSetEditLock(DBFhandle.l,  RecordNumber.l)
Prototype   xdbRemoveEditLock(DBFhandle.l, LOCK_NUM.l)
Prototype.l xdbIsEditLock(DBFhandle.l, RecordNumber.l)
;}
; ----------------------------------------------------------------------------------------------------
;{ DATABASE ROUTINES - Adding/Deleting Records
; ----------------------------------------------------------------------------------------------------
Prototype   xdbAddRecord(DBFhandle.l)
Prototype   xdbAppendRecord(DBFhandle.l)
Prototype   xdbClearBuffer(DBFhandle.l)
Prototype   xdbPutRecord(DBFhandle.l, RecordNumber.l)
Prototype   xdbGetRecord(DBFhandle.l, RecordNumber.l)
Prototype   xdbDeleteRecord(DBFhandle.l, RecordNumber.l)
Prototype   xdbRecallRecord(DBFhandle.l, RecordNumber.l)
Prototype.l xdbDeleted(DBFhandle.l, RecordNumber.l)
Prototype   xdbFlushDatabase(DBFhandle.l)
Prototype   xdbPack(DBFhandle.l)
Prototype   xdbZap(DBFhandle.l)
Prototype.l xdbRecordBuffer(DBFhandle.l)
Prototype   xdbSpeedAppend(DBFhandle.l, OnOff.l)
;}
; ----------------------------------------------------------------------------------------------------
;{ DATABASE ROUTINES - Database Information
; ----------------------------------------------------------------------------------------------------
Prototype.l xdbRecordCount(DBFhandle.l)
Prototype.l xdbFieldCount(DBFhandle.l)
Prototype.l xdbFieldNumber(DBFhandle.l, FieldName.p-ascii)
Prototype.l xdbRecordNumber(DBFhandle.l)
Prototype   xdbLastUpdated(DBFhandle.l, *YearNr.l, *MonthNr.l, *DayNr.l)
Prototype   xdbFieldInfo(DBFhandle.l, FieldNumber.l, *FieldName.p-ascii, *FieldType.p-ascii, *FieldLength.l, *FieldDecimals.l)
Prototype.l xdbFieldName(DBFhandle.l, FieldNumber.l)
Prototype.l xdbFieldType(DBFhandle.l, FieldNumber.l)
Prototype.l xdbFieldLength(DBFhandle.l, FieldNumber.l)
Prototype.l xdbFieldDecimals(DBFhandle.l, FieldNumber.l)
Prototype   xdbDatabaseHandles(DatabaseFilename.p-ascii, *CheetahHandle.l, *WindowsHandle.l)
Prototype   xdbIndexHandles(IndexFilename.p-ascii, *CheetahHandle.l, *WindowsHandle.l)
;}
; ----------------------------------------------------------------------------------------------------
;{ DATABASE ROUTINES - Navigating the Database
; ----------------------------------------------------------------------------------------------------
Prototype.l xdbEOF(DBFhandle.l)
Prototype.l xdbBOF(DBFhandle.l)
Prototype   xdbMoveFirst(DBFhandle.l, idxHandle.l)
Prototype   xdbMoveNext(DBFhandle.l, idxHandle.l)
Prototype   xdbMoveLast(DBFhandle.l, idxHandle.l)
Prototype   xdbMovePrev(DBFhandle.l, idxHandle.l)
Prototype   xdbSkipDeleted(DBFhandle.l, OnOff.l)
Prototype.l xdbKeyPosition(DBFhandle.l, idxHandle.l, KeyPosition.l)
;}
; ----------------------------------------------------------------------------------------------------
;{ DATABASE ROUTINES - Assigning Field Values
; ----------------------------------------------------------------------------------------------------
Prototype   xdbAssignField(DBFhandle.l, FieldName.p-ascii, FieldNumber.l, FieldString.p-ascii = 0)
Prototype   xdbAssignMemo(DBFhandle.l, FieldName.p-ascii, FieldNumber.l, MemAddress.l, StringLength.l)
Prototype   xdbAssignFieldINT(DBFhandle.l, FieldName.p-ascii, FieldNumber.l, IntValue.w)
Prototype   xdbAssignFieldLNG(DBFhandle.l, FieldName.p-ascii, FieldNumber.l, LongValue.l)
Prototype   xdbAssignFieldSNG(DBFhandle.l, FieldName.p-ascii, FieldNumber.l, SingleValue.f)
Prototype   xdbAssignFieldDBL(DBFhandle.l, FieldName.p-ascii, FieldNumber.l, DoubleValue.d)
Prototype   xdbAssignFieldCUR(DBFhandle.l, FieldName.p-ascii, FieldNumber.l, CurrencyValue.q)
;}
; ----------------------------------------------------------------------------------------------------
;{ DATABASE ROUTINES - Retrieving Field Values
; ----------------------------------------------------------------------------------------------------
Prototype.l xdbMemoValueLen(DBFhandle.l, FieldName.p-ascii, FieldCode.l = 0)
Prototype.l xdbMemoValueAddr(DBFhandle.l, FieldName.p-ascii, FieldCode.l = 0)
Prototype.l xdbFieldValue(DBFhandle.l, FieldName.p-ascii, FieldCode.l = 0)
Prototype.w xdbFieldValueINT(DBFhandle.l, FieldName.p-ascii, FieldCode.l = 0)
Prototype.l xdbFieldValueLNG(DBFhandle.l, FieldName.p-ascii, FieldCode.l = 0)
Prototype.f xdbFieldValueSNG(DBFhandle.l, FieldName.p-ascii, FieldCode.l = 0)
Prototype.d xdbFieldValueDBL(DBFhandle.l, FieldName.p-ascii, FieldCode.l = 0)
Prototype.q xdbFieldValueCUR(DBFhandle.l, FieldName.p-ascii, FieldCode.l = 0)
Prototype   xdbFieldPadding(DBFhandle.l, TrueFalse.l)
;}
; ----------------------------------------------------------------------------------------------------
;{ INDEX ROUTINES - Creation/Opening/Closing
; ----------------------------------------------------------------------------------------------------
Prototype   xdbCreateIndex(IndexFilename.p-ascii, DBFhandle.l, IndexExpression.p-ascii, Duplicates.l)
Prototype.l xdbOpenIndex(IndexFilename.p-ascii, DBFhandle.l)
Prototype   xdbCloseIndex(DBFhandle.l, idxHandle.l)
Prototype   xdbReindex(DBFhandle.l, idxHandle.l, UniqueContinueOrError.l = 0)
Prototype   xdbReindexAll(DBFhandle.l, UniqueContinueOrError.l = 0)
Prototype.l xdbSeek(DBFhandle.l, idxHandle.l, KeyToLookFor.p-ascii)
Prototype.l xdbSeekNext(DBFhandle.l, idxHandle.l, KeyToLookFor.p-ascii)
Prototype.l xdbSeekPartial(DBFhandle.l, idxHandle.l, PartialKeyToLookFor.p-ascii)
Prototype.l xdbSeekPartialNext(DBFhandle.l, idxHandle.l, PartialKeyToLookFor.p-ascii)
Prototype   xdbSetCallback(hWnd.l)
;}
; ----------------------------------------------------------------------------------------------------
;{ INDEX ROUTINES - Index information
; ----------------------------------------------------------------------------------------------------
Prototype.l xdbKeyLength(DBFhandle.l, idxHandle.l)
Prototype.l xdbKeyCount(DBFhandle.l, idxHandle.l)
Prototype.l xdbKeyUnique(DBFhandle.l, idxHandle.l)
Prototype.l xdbKeyExpression(DBFhandle.l, idxHandle.l)
Prototype.l xdbMKL(LongValue.l)
Prototype.l xdbMKI(IntegerValue.w)
;}
; ----------------------------------------------------------------------------------------------------
;{ QUERY ROUTINES
; ----------------------------------------------------------------------------------------------------
Prototype.l xdbCreateQuery(DBFhandle.l)
Prototype   xdbQueryCondition(QueryHandle.l, JoinPhrase.l, FieldName.p-ascii, Equality.l, vParameter1.p-ascii, vParameter2.p-ascii)
Prototype   xdbQuerySort(QueryHandle.l, FieldName.p-ascii, SortDirection.l)
Prototype   xdbQueryExecute(QueryHandle.l)
Prototype.d xdbQuerySUM(QueryHandle.l, FieldName.p-ascii)
Prototype.d xdbQueryMIN(QueryHandle.l, FieldName.p-ascii)
Prototype.d xdbQueryMAX(QueryHandle.l, FieldName.p-ascii)
Prototype.d xdbQueryAVG(QueryHandle.l, FieldName.p-ascii)
Prototype   xdbQueryDistinct(QueryHandle.l, FieldName.p-ascii)
Prototype   xdbHtmlStripTag(QueryHandle.l, TrueFalse.l)
Prototype   xdbDestroyQuery(QueryHandle.l)
Prototype.l xdbQueryIndex(QueryHandle.l)
;}
; ----------------------------------------------------------------------------------------------------
;{ DATE ROUTINES
; ----------------------------------------------------------------------------------------------------
Prototype.l xdbDaysApart(DateFrom.p-ascii, DateTo.p-ascii)
Prototype.l xdbDaysInMonth(Year.l, Month.l)
Prototype.l xdbAddDate(StartDate.p-ascii, Days.l)
Prototype.l xdbNameOfDay(DateCheck.p-ascii)
Prototype.l xdbTodaysDate()
Prototype.l xdbValidDate(DateCheck.p-ascii)
Prototype.l xdbDateToJulian(DateString.p-ascii)
Prototype.l xdbJulianToDate(JulianNumber.l)
;}
; ----------------------------------------------------------------------------------------------------
;{ MISCELLANEOUS ROUTINES
; ----------------------------------------------------------------------------------------------------
Prototype   xdbResetError()
Prototype.l xdbError()
Prototype.l xdbVersion()
Prototype   xdbDebugMode(TrueFalse.l)
Prototype.l xdbIsEncrypted(DBFhandle.l)
Prototype.l xdbEncryptionMethod(DBFhandle.l)
Prototype.l xdbTempFileName()
;}
; ----------------------------------------------------------------------------------------------------

CompilerIf Defined(CheetahFromMem, #PB_Variable) = #True

  XIncludeFile #PB_Compiler_Home + "Includes\Imports\MemoryModule_Import.pbi"

  Macro M_GetFunction
    MemoryGetProcAddress_
  EndMacro

  Procedure xdbEnd()
    Shared Cheetah2hWnd.l

    If Cheetah2hWnd
      MemoryFreeLibrary_(Cheetah2hWnd)
      Cheetah2hWnd = 0
    EndIf

  EndProcedure

  Procedure xdbInit(MemoryPointer.l)
    Shared Cheetah2hWnd.l

    If MemoryPointer
      Cheetah2hWnd = MemoryLoadLibrary_(MemoryPointer)
    EndIf

CompilerElse

  Macro M_GetFunction
    GetFunction
  EndMacro

  Procedure xdbEnd()
    Shared Cheetah2hWnd.l

    If Cheetah2hWnd
      CloseLibrary(Cheetah2hWnd)
      Cheetah2hWnd = 0
    EndIf

  EndProcedure

  Procedure xdbInit(DLLFileName.s = "")
    Shared Cheetah2hWnd.l

    If DLLFileName
      Cheetah2hWnd = OpenLibrary(#PB_Any, DLLFileName)
    Else
      Cheetah2hWnd = OpenLibrary(#PB_Any, "cheetah2.dll")
    EndIf

CompilerEndIf

  If Cheetah2hWnd

    ;DATABASE ROUTINES - Creation/Opening/Closing
    Global xdbCreate.xdbCreate                              = M_GetFunction(Cheetah2hWnd, "XDBCREATE_Z")
    Global xdbCreateExtended.xdbCreateExtended              = M_GetFunction(Cheetah2hWnd, "XDBCREATEEXTENDED_Z")
    Global xdbOpen.xdbOpen                                  = M_GetFunction(Cheetah2hWnd, "XDBOPEN_Z")
    Global xdbOpenEX.xdbOpenEX                              = M_GetFunction(Cheetah2hWnd, "XDBOPENEX_Z")
    Global xdbAlias.xdbAlias                                = M_GetFunction(Cheetah2hWnd, "XDBALIAS_Z")
    Global xdbSetAlias.xdbSetAlias                          = M_GetFunction(Cheetah2hWnd, "XDBSETALIAS_Z")
    Global xdbCreateFields.xdbCreateFields                  = M_GetFunction(Cheetah2hWnd, "XDBCREATEFIELDS_Z")
    Global xdbCreateFieldsExtended.xdbCreateFieldsExtended  = M_GetFunction(Cheetah2hWnd, "XDBCREATEFIELDSEXTENDED_Z")
    Global xdbAddField.xdbAddField                          = M_GetFunction(Cheetah2hWnd, "XDBADDFIELD_Z")
    Global xdbClose.xdbClose                                = M_GetFunction(Cheetah2hWnd, "XDBCLOSE_Z")
    Global xdbCloseAllIndexes.xdbCloseAllIndexes            = M_GetFunction(Cheetah2hWnd, "XDBCLOSEALLINDEXES_Z")

    ;DATABASE ROUTINES - MultiUser & Locking
    Global xdbMultiUser.xdbMultiUser                      = M_GetFunction(Cheetah2hWnd, "XDBMULTIUSER_Z")
    Global xdbFailedLockInfo.xdbFailedLockInfo            = M_GetFunction(Cheetah2hWnd, "XDBFAILEDLOCKINFO_Z")
    Global xdbSetExclusiveLock.xdbSetExclusiveLock        = M_GetFunction(Cheetah2hWnd, "XDBSETEXCLUSIVELOCK_Z")
    Global xdbRemoveExclusiveLock.xdbRemoveExclusiveLock  = M_GetFunction(Cheetah2hWnd, "XDBREMOVEEXCLUSIVELOCK_Z")
    Global xdbSetEditLock.xdbSetEditLock                  = M_GetFunction(Cheetah2hWnd, "XDBSETEDITLOCK_Z")
    Global xdbRemoveEditLock.xdbRemoveEditLock            = M_GetFunction(Cheetah2hWnd, "XDBREMOVEEDITLOCK_Z")
    Global xdbIsEditLock.xdbIsEditLock                    = M_GetFunction(Cheetah2hWnd, "XDBISEDITLOCK_Z")

    ; DATABASE ROUTINES - Adding/Deleting Records
    Global xdbAddRecord.xdbAddRecord          = M_GetFunction(Cheetah2hWnd, "XDBADDRECORD_Z")
    Global xdbAppendRecord.xdbAppendRecord    = M_GetFunction(Cheetah2hWnd, "XDBAPPENDRECORD_Z")
    Global xdbClearBuffer.xdbClearBuffer      = M_GetFunction(Cheetah2hWnd, "XDBCLEARBUFFER_Z")
    ;Global xdbPutRecord.xdbPutRecord          = M_GetFunction(Cheetah2hWnd, "XDBPUTRECORD_Z")
    Global xdbGetRecord.xdbGetRecord          = M_GetFunction(Cheetah2hWnd, "XDBGETRECORD_Z")
    Global xdbDeleteRecord.xdbDeleteRecord    = M_GetFunction(Cheetah2hWnd, "XDBDELETERECORD_Z")
    Global xdbRecallRecord.xdbRecallRecord    = M_GetFunction(Cheetah2hWnd, "XDBRECALLRECORD_Z")
    Global xdbDeleted.xdbDeleted              = M_GetFunction(Cheetah2hWnd, "XDBDELETED_Z")
    Global xdbFlushDatabase.xdbFlushDatabase  = M_GetFunction(Cheetah2hWnd, "XDBFLUSHDATABASE_Z")
    Global xdbPack.xdbPack                    = M_GetFunction(Cheetah2hWnd, "XDBPACK_Z")
    Global xdbZap.xdbZap                      = M_GetFunction(Cheetah2hWnd, "XDBZAP_Z")
    ;Global xdbRecordBuffer.xdbRecordBuffer    = M_GetFunction(Cheetah2hWnd, "XDBRECORDBUFFER_Z")
    Global xdbSpeedAppend.xdbSpeedAppend      = M_GetFunction(Cheetah2hWnd, "XDBSPEEDAPPEND_Z")

    ; DATABASE ROUTINES - Database Information
    Global xdbRecordCount.xdbRecordCount          = M_GetFunction(Cheetah2hWnd, "XDBRECORDCOUNT_Z")
    Global xdbFieldCount.xdbFieldCount            = M_GetFunction(Cheetah2hWnd, "XDBFIELDCOUNT_Z")
    Global xdbFieldNumber.xdbFieldNumber          = M_GetFunction(Cheetah2hWnd, "XDBFIELDNUMBER_Z")
    Global xdbRecordNumber.xdbRecordNumber        = M_GetFunction(Cheetah2hWnd, "XDBRECORDNUMBER_Z")
    Global xdbLastUpdated.xdbLastUpdated          = M_GetFunction(Cheetah2hWnd, "XDBLASTUPDATED_Z")
    Global xdbFieldInfo.xdbFieldInfo              = M_GetFunction(Cheetah2hWnd, "XDBFIELDINFO_Z")
    ;Global xdbFieldName.xdbFieldName              = M_GetFunction(Cheetah2hWnd, "XDBFIELDNAME_Z")
    ;Global xdbFieldType.xdbFieldType              = M_GetFunction(Cheetah2hWnd, "XDBFIELDTYPE_Z")
    Global xdbFieldLength.xdbFieldLength          = M_GetFunction(Cheetah2hWnd, "XDBFIELDLENGTH_Z")
    Global xdbFieldDecimals.xdbFieldDecimals      = M_GetFunction(Cheetah2hWnd, "XDBFIELDDECIMALS_Z")
    Global xdbDatabaseHandles.xdbDatabaseHandles  = M_GetFunction(Cheetah2hWnd, "XDBDATABASEHANDLES_Z")
    Global xdbIndexHandles.xdbIndexHandles        = M_GetFunction(Cheetah2hWnd, "XDBINDEXHANDLES_Z")

    ; DATABASE ROUTINES - Navigating the Database
    Global xdbEOF.xdbEOF                  = M_GetFunction(Cheetah2hWnd, "XDBEOF_Z")
    Global xdbBOF.xdbBOF                  = M_GetFunction(Cheetah2hWnd, "XDBBOF_Z")
    Global xdbMoveFirst.xdbMoveFirst      = M_GetFunction(Cheetah2hWnd, "XDBMOVEFIRST_Z")
    Global xdbMoveNext.xdbMoveNext        = M_GetFunction(Cheetah2hWnd, "XDBMOVENEXT_Z")
    Global xdbMovePrev.xdbMovePrev        = M_GetFunction(Cheetah2hWnd, "XDBMOVEPREV_Z")
    Global xdbSkipDeleted.xdbSkipDeleted  = M_GetFunction(Cheetah2hWnd, "XDBSKIPDELETED_Z")
    Global xdbKeyPosition.xdbKeyPosition  = M_GetFunction(Cheetah2hWnd, "XDBKEYPOSITION_Z")

    ; DATABASE ROUTINES - Assigning Field Values
    Global xdbAssignField.xdbAssignField        = M_GetFunction(Cheetah2hWnd, "XDBASSIGNFIELD_Z")
    Global xdbAssignMemo.xdbAssignMemo          = M_GetFunction(Cheetah2hWnd, "XDBASSIGNMEMO_Z")
    Global xdbAssignFieldINT.xdbAssignFieldINT  = M_GetFunction(Cheetah2hWnd, "XDBASSIGNFIELDINT_Z")
    Global xdbAssignFieldLNG.xdbAssignFieldLNG  = M_GetFunction(Cheetah2hWnd, "XDBASSIGNFIELDLNG_Z")
    Global xdbAssignFieldSNG.xdbAssignFieldSNG  = M_GetFunction(Cheetah2hWnd, "XDBASSIGNFIELDSNG_Z")
    Global xdbAssignFieldDBL.xdbAssignFieldDBL  = M_GetFunction(Cheetah2hWnd, "XDBASSIGNFIELDDBL_Z")
    Global xdbAssignFieldCUR.xdbAssignFieldCUR  = M_GetFunction(Cheetah2hWnd, "XDBASSIGNFIELDCUR_Z")

    ; DATABASE ROUTINES - Retrieving Field Values
    Global xdbMemoValueLen.xdbMemoValueLen    = M_GetFunction(Cheetah2hWnd, "XDBMEMOVALUELEN_Z")
    Global xdbMemoValueAddr.xdbMemoValueAddr  = M_GetFunction(Cheetah2hWnd, "XDBMEMOVALUEADDR_Z")
    ;Global xdbFieldValue.xdbFieldValue        = M_GetFunction(Cheetah2hWnd, "XDBFIELDVALUE_Z")
    Global xdbFieldValueINT.xdbFieldValueINT  = M_GetFunction(Cheetah2hWnd, "XDBFIELDVALUEINT_Z")
    Global xdbFieldValueLNG.xdbFieldValueLNG  = M_GetFunction(Cheetah2hWnd, "XDBFIELDVALUELNG_Z")
    Global xdbFieldValueSNG.xdbFieldValueSNG  = M_GetFunction(Cheetah2hWnd, "XDBFIELDVALUESNG_Z")
    Global xdbFieldValueDBL.xdbFieldValueDBL  = M_GetFunction(Cheetah2hWnd, "XDBFIELDVALUEDBL_Z")
    Global xdbFieldValueCUR.xdbFieldValueCUR  = M_GetFunction(Cheetah2hWnd, "XDBFIELDVALUECUR_Z")
    Global xdbFieldPadding.xdbFieldPadding    = M_GetFunction(Cheetah2hWnd, "XDBFIELDPADDING_Z")

    ; INDEX ROUTINES - Creation/Opening/Closing
    Global xdbCreateIndex.xdbCreateIndex          = M_GetFunction(Cheetah2hWnd, "XDBCREATEINDEX_Z")
    Global xdbOpenIndex.xdbOpenIndex              = M_GetFunction(Cheetah2hWnd, "XDBOPENINDEX_Z")
    Global xdbCloseIndex.xdbCloseIndex            = M_GetFunction(Cheetah2hWnd, "XDBCLOSEINDEX_Z")
    Global xdbReindex.xdbReindex                  = M_GetFunction(Cheetah2hWnd, "XDBREINDEX_Z")
    Global xdbReindexAll.xdbReindexAll            = M_GetFunction(Cheetah2hWnd, "XDBREINDEXALL_Z")
    Global xdbSeek.xdbSeek                        = M_GetFunction(Cheetah2hWnd, "XDBSEEK_Z")
    Global xdbSeekNext.xdbSeekNext                = M_GetFunction(Cheetah2hWnd, "XDBSEEKNEXT_Z")
    Global xdbSeekPartial.xdbSeekPartial          = M_GetFunction(Cheetah2hWnd, "XDBSEEKPARTIAL_Z")
    Global xdbSeekPartialNext.xdbSeekPartialNext  = M_GetFunction(Cheetah2hWnd, "XDBSEEKPARTIALNEXT_Z")
    Global xdbSetCallback.xdbSetCallback          = M_GetFunction(Cheetah2hWnd, "XDBSETCALLBACK_Z")

    ; INDEX ROUTINES - Index information
    Global xdbKeyLength.xdbKeyLength          = M_GetFunction(Cheetah2hWnd, "XDBKEYLENGTH_Z")
    Global xdbKeyCount.xdbKeyCount            = M_GetFunction(Cheetah2hWnd, "XDBKEYCOUNT_Z")
    Global xdbKeyUnique.xdbKeyUnique          = M_GetFunction(Cheetah2hWnd, "XDBKEYUNIQUE_Z")
    ;Global xdbKeyExpression.xdbKeyExpression  = M_GetFunction(Cheetah2hWnd, "XBKYEXPRESSION_Z")
    ;Global xdbMKL.xdbMKL                      = M_GetFunction(Cheetah2hWnd, "XDBMKL_Z")
    ;Global xdbMKI.xdbMKI                      = M_GetFunction(Cheetah2hWnd, "XDBMKI_Z")

    ; QUERY ROUTINES
    Global xdbCreateQuery.xdbCreateQuery        = M_GetFunction(Cheetah2hWnd, "XDBCREATEQUERY_Z")
    Global xdbQueryCondition.xdbQueryCondition  = M_GetFunction(Cheetah2hWnd, "XDBQUERYCONDITION_Z")
    Global xdbQuerySort.xdbQuerySort            = M_GetFunction(Cheetah2hWnd, "XDBQUERYSORT_Z")
    Global xdbQueryExecute.xdbQueryExecute      = M_GetFunction(Cheetah2hWnd, "XDBQUERYEXECUTE_Z")
    Global xdbQuerySUM.xdbQuerySUM              = M_GetFunction(Cheetah2hWnd, "XDBQUERYSUM_Z")
    Global xdbQueryMIN.xdbQueryMIN              = M_GetFunction(Cheetah2hWnd, "XDBQUERYMIN_Z")
    Global xdbQueryMAX.xdbQueryMAX              = M_GetFunction(Cheetah2hWnd, "XDBQUERYMAX_Z")
    Global xdbQueryAVG.xdbQueryAVG              = M_GetFunction(Cheetah2hWnd, "XDBQUERYAVG_Z")
    Global xdbQueryDistinct.xdbQueryDistinct    = M_GetFunction(Cheetah2hWnd, "XDBQUERYDISTINCT_Z")
    Global xdbHtmlStripTag.xdbHtmlStripTag      = M_GetFunction(Cheetah2hWnd, "XDBHTMLSTRIPTAG_Z")
    Global xdbDestroyQuery.xdbDestroyQuery      = M_GetFunction(Cheetah2hWnd, "XDBDESTROYQUERY_Z")
    Global xdbQueryIndex.xdbQueryIndex          = M_GetFunction(Cheetah2hWnd, "XDBQUERYINDEX_Z")

    ; DATE ROUTINES
    Global xdbDaysApart.xdbDaysApart        = M_GetFunction(Cheetah2hWnd, "XDBDAYSAPART_Z")
    Global xdbDaysInMonth.xdbDaysInMonth    = M_GetFunction(Cheetah2hWnd, "XDBDAYSINMONTH_Z")
    ;Global xdbAddDate.xdbAddDate            = M_GetFunction(Cheetah2hWnd, "XDBADDDATE_Z")
    ;Global xdbNameOfDay.xdbNameOfDay        = M_GetFunction(Cheetah2hWnd, "XDBNAMEOFDAY_Z")
    ;Global xdbTodaysDate.xdbTodaysDate      = M_GetFunction(Cheetah2hWnd, "XDBTODAYSDATE_Z")
    Global xdbValidDate.xdbValidDate        = M_GetFunction(Cheetah2hWnd, "XDBVALIDDATE_Z")
    Global xdbDateToJulian.xdbDateToJulian  = M_GetFunction(Cheetah2hWnd, "XDBDATETOJULIAN_Z")
    ;Global xdbJulianToDate.xdbJulianToDate  = M_GetFunction(Cheetah2hWnd, "XDBJULIANTODATE_Z")

    ; MISCELLANEOUS ROUTINES
    Global xdbResetError.xdbResetError              = M_GetFunction(Cheetah2hWnd, "XDBRESETERROR_Z")
    Global xdbError.xdbError                        = M_GetFunction(Cheetah2hWnd, "XDBERROR_Z")
    ;Global xdbVersion.xdbVersion                    = M_GetFunction(Cheetah2hWnd, "XDBVERSION_Z")
    Global xdbDebugMode.xdbDebugMode                = M_GetFunction(Cheetah2hWnd, "XDBDEBUGMODE_Z")
    Global xdbIsEncrypted.xdbIsEncrypted            = M_GetFunction(Cheetah2hWnd, "XDBISENCRYPTED_Z")
    Global xdbEncryptionMethod.xdbEncryptionMethod  = M_GetFunction(Cheetah2hWnd, "XDBENCRYPTIONMETHOD_Z")
    ;Global xdbTempFileName.xdbTempFileName          = M_GetFunction(Cheetah2hWnd, "XDBTEMPFILENAME_Z")

    ProcedureReturn Cheetah2hWnd
  EndIf

EndProcedure
;}

; DATABASE ROUTINES - Adding/Deleting Records
Procedure.l xdbPutRecord(DBFhandle.l, RecordNumber.l)
  Shared Cheetah2hWnd.l
  Protected xdbPutRecord_.xdbPutRecord  = M_GetFunction(Cheetah2hWnd, "XDBPUTRECORD_Z")
  ProcedureReturn xdbPutRecord_(DBFhandle, @RecordNumber)
EndProcedure

Procedure.s xdbRecordBuffer(DBFhandle.l)
  Shared Cheetah2hWnd.l
  Protected xdbRecordBuffer_.xdbRecordBuffer = M_GetFunction(Cheetah2hWnd, "XDBRECORDBUFFER_Z")

  ProcedureReturn PeekS(xdbRecordBuffer_(DBFhandle), #PB_Any, #PB_Ascii)
EndProcedure

; DATABASE ROUTINES - Database Information
Procedure.s xdbFieldName(DBFhandle.l, FieldNumber.l)
  Shared Cheetah2hWnd.l
  Protected xdbFieldName_.xdbFieldName = M_GetFunction(Cheetah2hWnd, "XDBFIELDNAME_Z")

  ProcedureReturn PeekS(xdbFieldName_(DBFhandle, FieldNumber), #PB_Any, #PB_Ascii)
EndProcedure

Procedure.s xdbFieldType(DBFhandle.l, FieldNumber.l)
  Shared Cheetah2hWnd.l
  Protected xdbFieldType_.xdbFieldType = M_GetFunction(Cheetah2hWnd, "XDBFIELDTYPE_Z")

  ProcedureReturn PeekS(xdbFieldType_(DBFhandle, FieldNumber), #PB_Any, #PB_Ascii)
EndProcedure

; DATABASE ROUTINES - Retrieving Field Values
Procedure.s xdbFieldValue(DBFhandle.l, FieldName.s, FieldCode.l = 0)
  Shared Cheetah2hWnd.l
  Protected xdbFieldValue_.xdbFieldValue = M_GetFunction(Cheetah2hWnd, "XDBFIELDVALUE_Z")

  ProcedureReturn PeekS(xdbFieldValue_(DBFhandle, FieldName, FieldCode), #PB_Any, #PB_Ascii)
EndProcedure

; INDEX ROUTINES - Index information
Procedure.s xdbKeyExpression(DBFhandle.l, idxHandle.l)
  Shared Cheetah2hWnd.l
  Protected xdbKeyExpression_.xdbKeyExpression = M_GetFunction(Cheetah2hWnd, "XBKYEXPRESSION_Z")

  ProcedureReturn PeekS(xdbKeyExpression_(DBFhandle, idxHandle), #PB_Any, #PB_Ascii)
EndProcedure

Procedure.s xdbMKL(LongValue.l)
  Shared Cheetah2hWnd.l
  Protected xdbMKL_.xdbMKL = M_GetFunction(Cheetah2hWnd, "XDBMKL_Z")

  ProcedureReturn PeekS(xdbMKL_(LongValue), #PB_Any, #PB_Ascii)
EndProcedure

Procedure.s xdbMKI(IntegerValue.w)
  Shared Cheetah2hWnd.l
  Protected xdbMKI_.xdbMKI = M_GetFunction(Cheetah2hWnd, "XDBMKI_Z")

  ProcedureReturn PeekS(xdbMKI_(IntegerValue), #PB_Any, #PB_Ascii)
EndProcedure

; DATE ROUTINES
Procedure.s xdbAddDate(StartDate.s, Days.l)
  Shared Cheetah2hWnd.l
  Protected xdbAddDate_.xdbAddDate = M_GetFunction(Cheetah2hWnd, "XDBADDDATE_Z")

  ProcedureReturn PeekS(xdbAddDate_(StartDate, Days), #PB_Any, #PB_Ascii)
EndProcedure

Procedure.s xdbNameOfDay(DateCheck.s)
  Shared Cheetah2hWnd.l
  Protected xdbNameOfDay_.xdbNameOfDay = M_GetFunction(Cheetah2hWnd, "XDBNAMEOFDAY_Z")

  ProcedureReturn PeekS(xdbNameOfDay_(DateCheck), #PB_Any, #PB_Ascii)
EndProcedure

Procedure.s xdbTodaysDate()
  Shared Cheetah2hWnd.l
  Protected xdbTodaysDate_.xdbTodaysDate = M_GetFunction(Cheetah2hWnd, "XDBTODAYSDATE_Z")

  ProcedureReturn PeekS(xdbTodaysDate_(), #PB_Any, #PB_Ascii)
EndProcedure

Procedure.s xdbJulianToDate(JulianNumber.l)
  Shared Cheetah2hWnd.l
  Protected xdbJulianToDate_.xdbJulianToDate = M_GetFunction(Cheetah2hWnd, "XDBJULIANTODATE_Z")

  ProcedureReturn PeekS(xdbJulianToDate_(JulianNumber), #PB_Any, #PB_Ascii)
EndProcedure

; MISCELLANEOUS ROUTINES
Procedure.s xdbVersion()
  Shared Cheetah2hWnd.l
  Protected xdbVersion_.xdbVersion = M_GetFunction(Cheetah2hWnd, "XDBVERSION_Z")

  ProcedureReturn PeekS(xdbVersion_(), #PB_Any, #PB_Ascii)
EndProcedure

Procedure.s xdbTempFileName()
  Shared Cheetah2hWnd.l
  Protected xdbTempFileName_.xdbTempFileName = M_GetFunction(Cheetah2hWnd, "XDBTEMPFILENAME_Z")

  ProcedureReturn PeekS(xdbTempFileName_(), #PB_Any, #PB_Ascii)
EndProcedure
Not tested at all but should work :wink:
If required the memorymodule so tell me i will make a download available.

greetings
Thomas
PureBasic 5.73 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Old bugs good, new bugs bad! Updates are evil: might fix old bugs and introduce no new ones.
Image
Pureabc
User
User
Posts: 76
Joined: Mon Jan 16, 2006 1:11 am

Post by Pureabc »

ts-soft,

xdbUseDLL() is not needed anymore?

Could you make the memorymodule available?

Thank you.
User avatar
ts-soft
Always Here
Always Here
Posts: 5756
Joined: Thu Jun 24, 2004 2:44 pm
Location: Berlin - Germany

Post by ts-soft »

the code doesn't work with 4.20 but you have pm

greetings
Thomas
PureBasic 5.73 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Old bugs good, new bugs bad! Updates are evil: might fix old bugs and introduce no new ones.
Image
User avatar
Rings
Moderator
Moderator
Posts: 1435
Joined: Sat Apr 26, 2003 1:11 am

Post by Rings »

Code: Select all

M_GetFunction
is from the PBOSL, to include the dll in your exe
SPAMINATOR NR.1
User avatar
ts-soft
Always Here
Always Here
Posts: 5756
Joined: Thu Jun 24, 2004 2:44 pm
Location: Berlin - Germany

Post by ts-soft »

This Code using the static lib compiled from memorymodule.c from J. Bauch.
PBOSL uses the same Source with some namechanges
PureBasic 5.73 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Old bugs good, new bugs bad! Updates are evil: might fix old bugs and introduce no new ones.
Image
Post Reply