I modified your code and added some functions.
It took me a while to get the Structure/Pointer stuff figured out.
Anyways here is my tsunami.pbi include file, feel free to help out and add to it. Also blueb ihanged your constant names so they would match the manual, I hope you dont mind.
tsunami.pbi
Code: Select all
; English forum: http://jconserv.net/purebasic/viewtopic.php?t=7698
; Author: blueb modified by ppjm99
; Date: 29. September 2003
; Works For the Tsunami Record Manager - TRMPRO.DLL and TRM.DLL (free version)
; Version 3.3 ... 2002-09-02
; the demo sample data and the Tsunami.DLL can be downloaded from: http://www.trm-ug.com
Structure TsunamiStructure
op.l ; Tsunami operation number
file.l ; Tsunami file handle
dataptr.l ; Address of data buffer
datalen.l ; Length of data buffer
keyptr.l ; Address of key buffer
keylen.l ; Length of key buffer
keyno.l ; Key number
EndStructure
Structure TsunamiKeySegment
title.b[25]
keyno.b
keypos.w
keylen.b
KeyFlags.b
EndStructure
Structure TsunamiFileDef
PageSize.b
compression.b
Segments.b
segment.TsunamiKeySegment[128]
EndStructure
Global TFD.TsunamiFileDef
Global Tsu.TsunamiStructure
Global FieldCount
;Tsunami Constants
#CASE_SENSITIVE = 1
#NO_DUPLICATES = 2
#NO_COMPRESSION = 4
#BINARY_KEY = 8
;
#KEY_ONLY = 16384
;
#REBUILD_IDS = 2
;The following EQUATES (constants) represent the Tsunami
; operation codes (Op) used with the pointer-based APIs...
#Trm_Accelerate = 32
#Trm_Close = 1
#Trm_CloseAll = 28
#Trm_Count = 17
#Trm_Create = 14
#Trm_CurrKeyPos = 45
#Trm_Delete = 4
#Trm_FileIsOpen = 16
#Trm_FileMaxIncr = 41
#Trm_FileSize = 18
#Trm_Flush = 27
#Trm_FlushAll = 29
#Trm_GetByKeyPos = 44
#Trm_GetDirect = 23
#Trm_GetEqual = 5
#Trm_GetEqualOrGreater = 9
#Trm_GetEqualOrLess = 11
#Trm_GetFileDef = 36
#Trm_GetFileVer = 25
#Trm_GetFirst = 12
#Trm_GetGreater = 8
#Trm_GetLast = 13
#Trm_GetLess = 10
#Trm_GetNext = 6
#Trm_GetPosition = 22
#Trm_GetPrev = 7
#Trm_Insert = 2
#Trm_Integrity = 37
#Trm_Open = 0
#Trm_Rebuild = 38
#Trm_Recover = 39
#Trm_SetEncryptionKey = 40
#Trm_SetKeyPath = 30
#Trm_StepFirst = 33
#Trm_StepLast = 34
#Trm_StepNext = 24
#Trm_StepPrev = 35
#Trm_TimeOut = 31
#Trm_Update = 3
#Trm_Version = 26
;End of Tsunami Include Information
;TPB = TsunamiPureBasic
Procedure TPBInitFileDefHdr(PageSize.b,Compress.b,Segments.b)
TFD\PageSize = 1
TFD\compression = 1
TFD\Segments = 1
EndProcedure
Procedure TPBAddFieldDef(Name$,KeyNum.b,SegPos.w,SegLen.b,KeyFlags.b)
title$ = LSet(Name$,25)
TFD\segment[FieldCount]\title = @title$
TFD\segment[FieldCount]\keyno = KeyNum
TFD\segment[FieldCount]\keypos = SegPos
TFD\segment[FieldCount]\keylen = SegLen
TFD\segment[FieldCount]\KeyFlags = 0 ;#NO_COMPRESSION & #NO_DUPLICATES
FieldCount + 1
EndProcedure
Procedure TPBCreateFile(File$,OverWrite.b)
Tsu\op = #Trm_Create
Tsu\file = 0
Tsu\dataptr = TFD
Tsu\datalen = 3 + (30 * TFD\Segments)
Tsu\keyptr = @File$
Tsu\keylen = Len(File$)
Tsu\keyno = OverWrite
Result = CallFunction(0, "trm_udt", @Tsu)
If Result <> 0
MessageRequester("Error", "Error creating file:" + Str(Result), 0)
End
EndIf
EndProcedure
Procedure TPBInsertRecord(hFile,Record$)
Tsu\op = #Trm_Insert
Tsu\file = hFile
Tsu\dataptr = @Record$
Tsu\datalen = Len(Record$)
Result = CallFunction(0, "trm_udt", @Tsu)
If Result <> 0
MessageRequester("Error", "Error inserting record:" + Str(Result), 0)
End
EndIf
EndProcedure
Procedure.l TPBOpenTable(FileName$)
Tsu\op = #Trm_Open
Tsu\keyptr = @FileName$
Tsu\keylen = Len(FileName$)
Tsu\keyno = 0 ; single user
Result = CallFunction(0, "trm_udt", @Tsu)
If Result <> 0
MessageRequester("Error", "Sorry, Can't find the data file", 0)
End
EndIf
ProcedureReturn Tsu\file
EndProcedure
Procedure TPBCloseTable(hFile)
Tsu\op = #Trm_Close
Tsu\file = hFile
Result = CallFunction(0, "trm_udt", @Tsu)
If Result <> 0
MessageRequester("Error", "Problem closing the data file: " + Str(Result), 0)
End
EndIf
EndProcedure
Procedure.s TPBGetRecord(hFile,keyno,op)
Record$ = Space(100)
Tsu\op = op
Tsu\dataptr = @Record$
Tsu\datalen = Len(Record$)
Tsu\keyno = keyno
Result = CallFunction(0, "trm_udt", @Tsu)
If Result <> 0
MessageRequester("Error", "Error getting record:" + Str(Result), 0)
End
EndIf
ProcedureReturn Record$
EndProcedure
Procedure TPBAccelerate(hFile,CacheSizeMB)
Tsu\op = #Trm_Accelerate
Tsu\file = hFile
Tsu\keyno = CacheSizeMB
Result = CallFunction(0, "trm_udt", @Tsu)
If Result <> 0
MessageRequester("Error", "Problem accelerating data file: " + Str(Result), 0)
End
EndIf
EndProcedure
Procedure TPBRecordCount(hFile)
Tsu\op = #Trm_Count
Tsu\file = hFile
Result = CallFunction(0, "trm_udt", @Tsu)
If Result <> 0
MessageRequester("Error", "Problem getting record count: " + Str(Result), 0)
End
EndIf
ProcedureReturn Tsu\keyno
EndProcedure
***************************************************
;Example Call to create new table
Procedure CreateDocsTable()
FieldCount = 0
TPBAddFieldDef("DocPath",1,1,10,#NO_COMPRESSION & NO_DUPLICATES)
TPBInitFileDefHdr(1,1,FieldCount)
TPBCreateFile("docs.dat",1 )
EndProcedure
;Example insert a record
hFile = TPBOpenTable("docs.dat")
Record$ = DocPath$
TPBInsertRecord(hFile,Record$)
TPBCloseTable(hFile)