.MSG Messagebase API code

Area:    Quik_Bas
  Msg:    #254
 Date:    02-17-93 22:42 (Public) 
 From:    Coridon Henshaw          
 To:      All                      
 Subject: .MSG Messagebase API code
Hello All!

Here's part of the full messagebase API that I promised.  
Untested, use at own risk!

===Chop===
'NAME: MSGAPI.BAS
'FROM: Coridon Henshaw@1:250/802
'DESC: .MSG base API code

'Copyright 1993 by Coridon Henshaw
'
'This code may be used in any program costing under $30.  
This code may also be 'used in freeware programs.

'This code MAY NOT be used in any crippleware program

'$INCLUDE: 'FIDO.BI'

DECLARE FUNCTION MSGDeleteMessage% (BaseNumber%, Number%)
DECLARE FUNCTION MSGPutMessage% (BaseNumber%, MsgHdr AS ANY, Text$)
DECLARE FUNCTION MSGGetHdr% (BaseNumber%, Number%, MsgHdr AS ANY)
DECLARE FUNCTION MSGPutHdr% (BaseNumber%, Number%, MsgHdr AS ANY)
DECLARE FUNCTION MSGCreateIndex% (BaseNumber%)
DECLARE FUNCTION MSGInit% (Path$, BaseNumber%)
DECLARE FUNCTION MSGDeInit% (BaseNumber%)
DECLARE FUNCTION MSGGetMessage% (BaseNumber%, Number%, MsgHdr AS ANY, Text$)

CONST True = -1, False = NOT True, MaxBases = 1
DEFINT A-Z

TYPE MsgType
        BasePaths(0 TO MaxBases)        AS STRING * 65
        MaxMsgs(0 TO MaxBases)          AS INTEGER
        Init(0 TO MaxBases)             AS INTEGER
END TYPE

DIM MsgHdr                              AS MSGHeaderType
DIM SHARED Msg                          AS MsgType

'$DYNAMIC
DIM SHARED Msgs(16384, 0 TO MaxBases)   AS INTEGER

REM $STATIC
FUNCTION MSGDeInit (BaseNumber%)
FOR X& = 1 TO Msg.MaxMsgs(BaseNumber%)
        Msgs(X&, BaseNumber%) = 0
NEXT
Msg.Init(BaseNumber%) = False
Msg.MaxMsgs(BaseNumber%) = 0
Msg.BasePaths(BaseNumber%) = ""
DeInitBase% = True
END FUNCTION

FUNCTION MSGDeleteMessage (BaseNumber, Number%)
IF Msg.Init(BaseNumber) = True THEN
        Filename$ = RTRIM$(Msg.BasePaths(BaseNumber)) + 
RTRIM$(LTRIM$(STR$(Msgs(Number%, BaseNumber)))) + ".MSG"
        KILL Filename$
        FOR X& = 1 TO 99999999
                IF DIR$(RTRIM$(LTRIM$(STR$(X&))) + ".MSG") 
= _ RTRIM$(LTRIM$(STR$(X&))) + ".MSG" THEN
                        Msgs(Pointer&, BaseNumber) = X&
                        Pointer& = Pointer& + 1
                END IF
        NEXT

END IF
END FUNCTION

FUNCTION MSGGetHdr (BaseNumber%, Number%, MsgHdr AS MSGHeaderType)
'IMPORT: BaseNumber%
'        Number%
'EXPORT: MsgHdr

IF BaseNumber% >= 0 AND BaseNumber% <= MaxBases THEN
        IF Msg.Init(BaseNumber%) = True THEN
                IF Number% <= Msg.MaxMsgs(BaseNumber%) THEN

                Handle = FREEFILE
                OPEN RTRIM$(Msg.BasePaths(BaseNumber)) + _ 
RTRIM$(LTRIM$(STR$(Msgs(Number%, BaseNumber%)))) + ".MSG" 
FOR BINARY AS Handle

                GET #Handle, , MsgHdr

                CLOSE Handle

                MSGGetHdr = True
                END IF
        END IF
END IF

END FUNCTION

FUNCTION MSGGetMessage (BaseNumber%, Number%, MsgHdr AS MSGHeaderType, Text$)
'IMPORT: BaseNumber%
'        Number%
'EXPORT: MsgHdr
'        Text$
IF BaseNumber% >= 0 AND BaseNumber% <= MaxBases THEN
        IF Msg.Init(BaseNumber%) = True THEN
                IF Number% <= Msg.MaxMsgs(BaseNumber%) THEN

                Handle = FREEFILE
                OPEN RTRIM$(Msg.BasePaths(BaseNumber)) + _ 
RTRIM$(LTRIM$(STR$(Msgs(Number%, BaseNumber%)))) + ".MSG" 
FOR BINARY AS Handle

                GET #Handle, , MsgHdr

                Buffer$ = STRING$(LOF(Handle) - LOC(Handle), 1)
                GET #Handle, , Buffer$
                Text$ = Buffer$

                CLOSE Handle

                MSGGetMessage = True
                END IF
        END IF
END IF

END FUNCTION

FUNCTION MSGInit (Path$, BaseNumber)
IF RIGHT$(Path$, 1) <> "\" THEN Path$ = Path$ + "\"

FOR X& = 1 TO 99999999
        IF DIR$(RTRIM$(LTRIM$(STR$(X&))) + ".MSG") = 
RTRIM$(LTRIM$(STR$(X&)))_ + ".MSG" THEN
                Msgs(Pointer&, BaseNumber) = X&
                Pointer& = Pointer& + 1
        END IF
NEXT

Msg.Init(BaseNumber) = True
Msg.MaxMsgs(BaseNumber) = Pointer&
Msg.BasePaths(BaseNumber) = Path$

END FUNCTION

FUNCTION MSGPutHdr (BaseNumber%, Number%, MsgHdr AS MSGHeaderType)
'IMPORT: BaseNumber%
'        Number%
'        MsgHdr

IF BaseNumber% >= 0 AND BaseNumber% <= MaxBases THEN
        IF Msg.Init(BaseNumber%) = True THEN
                IF Number% <= Msg.MaxMsgs(BaseNumber%) THEN

                Handle = FREEFILE
                OPEN RTRIM$(Msg.BasePaths(BaseNumber)) + _ 
RTRIM$(LTRIM$(STR$(Msgs(Number%, BaseNumber%)))) + ".MSG" 
FOR BINARY AS Handle

                PUT #Handle, 1, MsgHdr

                CLOSE Handle

                MSGPutHdr = True
                END IF
        END IF
END IF

END FUNCTION

FUNCTION MSGPutMessage (BaseNumber%, MsgHdr AS MSGHeaderType, Text$)
'IMPORT: BaseNumber%
'        MsgHdr
'        Text$
IF BaseNumber% >= 0 AND BaseNumber% <= MaxBases THEN
        IF Msg.Init(BaseNumber%) = True THEN

                Number& = 1

                FOR X& = 0 TO Msg.MaxMsgs(BaseNumber%)
                        IF Msgs(X&, BaseNumber%) > Number& THEN Number& = _ 
Msgs(X&, BaseNumber%)
                NEXT

                Handle = FREEFILE
                Filename$ = 
RTRIM$(Msg.BasePaths(BaseNumber)) + _ 
RTRIM$(LTRIM$(STR$(Msgs(Number&, BaseNumber)))) + ".MSG"
                OPEN Filename$ FOR BINARY AS Handle

                PUT #Handle, , MsgHdr
                GET #Handle, , Text$

                CLOSE Handle

                Msg.MaxMsgs(BaseNumber%) = Msg.MaxMsgs(BaseNumber%) + 1
                Msgs(Msg.MaxMsgs(BaseNumber%), BaseNumber%) = Number&

                MSGPutMessage = True

        END IF
END IF

-end-

Outer Court
Echo Basic Postings

Books at Amazon:

Back to BASIC: The History, Corruption, and Future of the Language

Hackers: Heroes of the Computer Revolution (including Tiny BASIC)

Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution

The Advent of the Algorithm: The Idea that Rules the World

Moths in the Machine: The Power and Perils of Programming

Mastering Visual Basic .NET