Raw ECHOLIST data files -

Area:    Quik_Bas
  Msg:    #305
 Date:    02-06-93 13:06 (Public) 
 From:    Coridon Henshaw          
 To:      All                      
 Subject: Raw ECHOLIST data files -
Hello All!

Here's a little project that I've been working on for some time:
===Chop===
'NAME: ELD2ISAM.BAS
'DESC: Converts ELIST raw datafiles to ISAM format.
'CMNT: Sorry, no comments this time ;)
'REQU: BASIC PDS with ISAM support loaded.
'FROM: Coridon Henshaw @ 1:250/820

DECLARE FUNCTION Exist% (File$)
DECLARE FUNCTION BreakString% (OutArray() AS STRING, InString$)

DEFINT A-Z

TYPE ModeratorType
        FirstName       AS STRING * 15
        Lastname        AS STRING * 15
        Zone            AS INTEGER
        Net             AS INTEGER
        Node            AS INTEGER
        Point           AS INTEGER
END TYPE
TYPE ElistDataType
        EchoTag         AS STRING * 20
        BriefDesc       AS STRING * 60
        Moderator       AS ModeratorType
        DescIndex       AS LONG
        RangeIndex      AS LONG
        GateIndex       AS LONG
        Volume          AS STRING * 10
        LastUpdate      AS STRING * 10
        SysopOnly       AS STRING * 1
        Member          AS STRING * 1
END TYPE

COLOR 14, 1
CLS
PRINT "Elist raw data files to ISAM database converter V1.5"
PRINT
PRINT "Freeware by Sirrus Software"
PRINT "Code is Copyright (C) 1993 Coridon Henshaw"
PRINT "Noncomerical use _ONLY_"

DIM ElistData           AS ElistDataType
DIM Fields(1 TO 21)     AS STRING
DIM Temp                AS STRING * 4000

IF Exist("ELDESC.ITX") THEN KILL "ELDESC.ITX"
IF Exist("ELRANGE.ITX") THEN KILL "ELRANGE.ITX"
IF Exist("ELGATE.ITX") THEN KILL "ELGATE.ITX"
IF Exist("ELDATA.IDX") THEN KILL "ELDATA.IDX"

OPEN "ELAREA.CSV" FOR INPUT AS #1
OPEN "ELDESC.ITX" FOR BINARY AS #2
OPEN "ELRANGE.ITX" FOR BINARY AS #3
OPEN "ELGATE.ITX" FOR BINARY AS #4
OPEN "ELDATA.IDX" FOR ISAM ElistDataType "NULL" AS #6

BEGINTRANS
DO
        ERASE Fields
        LINE INPUT #1, Temp
        IF BreakString(Fields(), Temp) = 1 THEN

                ElistData.EchoTag = Fields(1)
                ElistData.BriefDesc = Fields(2)
                ElistData.Moderator.FirstName = Fields(3)
                ElistData.Moderator.Lastname = Fields(4)
                ElistData.Moderator.Zone = VAL(Fields(5))
                ElistData.Moderator.Net = VAL(Fields(6))
                ElistData.Moderator.Node = VAL(Fields(7))
                ElistData.Moderator.Point = VAL(Fields(8))

                ElistData.DescIndex = LOC(2)
                Length = LEN(Fields(9))
                PUT #2, , Length
                PUT #2, , Fields(9)

                ElistData.RangeIndex = LOC(3)
                Length = LEN(Fields(10))
                PUT #3, , Length
                PUT #3, , Fields(10)

                ElistData.GateIndex = LOC(4)
                Length = LEN(Fields(11))
                PUT #4, , Length
                PUT #4, , Fields(11)

                '
                'Total nodes field -  Not implemented.
                '

                ElistData.Volume = Fields(13)
                ElistData.LastUpdate = Fields(14)

                '
                'Unknown field
                '

                '
                'Perminent moderator? (Unknown)
                '

                ElistData.SysopOnly = Fields(17)
                ElistData.Member = Fields(18)

                '
                'Rulefile - not implemented
                '

                LOCATE 7, 1
                PRINT "Echo: "; ElistData.EchoTag;
                INSERT #6, ElistData
        ELSE
                PRINT
                PRINT "Echo "; Fields(1); " is not standard format; rejected"
        END IF
LOOP UNTIL EOF(1) OR INKEY$ <> ""

CREATEINDEX #6, "echotag", 1, "EchoTag"
CREATEINDEX #6, "volume", 0, "Volume"
CREATEINDEX #6, "lastupd", 0, "LastUpdate"
CREATEINDEX #6, "restrict", 0, "SysopOnly", "Member"

COMMITTRANS

PRINT
PRINT "Done conversion"

FUNCTION BreakString% (OutArray() AS STRING, PassedString AS STRING)
ON LOCAL ERROR GOTO HandleError
DIM InString    AS STRING
DIM Char        AS STRING * 1
InString = RTRIM$(PassedString)
OutArrayPointer = 1
InStrLength = LEN(InString)
FOR Count& = 1 TO InStrLength
        Char = MID$(InString, Count&, 1)
        SELECT CASE Char
                CASE CHR$(34)
                        IF MID$(InString, Count& + 1, 1) <> CHR$(34) THEN
                                IF QuotedLevel = 1 THEN
                                        QuotedLevel = 0
                                ELSE
                                        QuotedLevel = 1
                                END IF
                        END IF
                CASE ","
                        IF QuotedLevel = 0 THEN
                                        IF OutArrayPointer < 21 THEN
                                                
OutArrayPointer =_ OutArrayPointer + 1
                                        ELSE
                                                ERROR 9
                                        END IF
                        END IF
                CASE ELSE
                        OutArray(OutArrayPointer) = 
OutArray(OutArrayPointer)_ + Char
        END SELECT
NEXT
BreakString = 1
EXIT FUNCTION
HandleError:
BreakString = 0
RESUME ExitFunction
ExitFunction:
END FUNCTION

FUNCTION Exist (File$)
IF DIR$(File$) = UCASE$(File$) THEN Exist = 1
END FUNCTION
===Chop=== END ELD2ISAM.BAS
And some sample code to use the ISAM database:
===Chop===
'NAME: ECHOINFO.BAS
'CMNT: Code is in the public domain
'FROM: Coridon Henshaw (1:250/820@Fidonet.org)

DECLARE FUNCTION LoadLTHString$ (Filenumber%, Offset&)
DEFINT A-Z

TYPE ModeratorType
        FirstName       AS STRING * 15
        Lastname        AS STRING * 15
        Zone            AS INTEGER
        Net             AS INTEGER
        Node            AS INTEGER
        Point           AS INTEGER
END TYPE
TYPE ElistDataType
        EchoTag         AS STRING * 20
        BriefDesc       AS STRING * 60
        Moderator       AS ModeratorType
        DescIndex       AS LONG
        RangeIndex      AS LONG
        GateIndex       AS LONG
        Volume          AS STRING * 10
-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