Nodelist reader (FINALLY!

Area:    Quik_Bas
  Msg:    #349
 Date:    02-05-93 11:47 (Public) 
 From:    Coridon Henshaw          
 To:      All                      
 Subject: Nodelist reader (FINALLY!
Hello All!

I've finally finished the below code for reading a Fido 
standard nodelist. This could be easily modifyed to convert 
the nodelist to a ISAM datafile.

===Chop===

'NAME: NODELIST.BAS
'FROM: Coridon Henshaw@1:250/820
'DESC: Nodelist reader

DECLARE FUNCTION ExtractAddress$ (Zone%, Net%, Node%)
DECLARE SUB PrintNodelistData (X%, Y%, Nodelist AS ANY)

DECLARE FUNCTION BreakString% (OutArray() AS STRING, InString AS STRING)
'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
'External function in quicklibarary for speed
'

DEFINT A-Z

TYPE AddrType
        Zone            AS INTEGER
        Region          AS INTEGER
        Net             AS INTEGER
        Node            AS INTEGER
END TYPE

TYPE NodelistType
        Addr            AS AddrType
        System          AS STRING * 36
        Location        AS STRING * 36
        Sysop           AS STRING * 36
        Phone           AS STRING * 20
        BPS             AS STRING * 5
        Flags           AS STRING * 50
END TYPE

DIM NodelistBuffer(0 TO 30) AS STRING
DIM Nodelist AS NodelistType

OPEN "NODELIST.022" FOR INPUT AS #1
'
'Change to match the current nodelist number
'

CLS
DO
        LINE INPUT #1, Buffer$

        IF LEFT$(Buffer$, 1) <> ";" THEN

                Options = BreakString(NodelistBuffer(), Buffer$)

                SELECT CASE NodelistBuffer(0)
                        CASE "Zone"
                                Nodelist.Addr.Zone = VAL(NodelistBuffer(1))
                        CASE "Region"
                                Nodelist.Addr.Region = VAL(NodelistBuffer(1))
                        CASE "Host"
                                Nodelist.Addr.Net = VAL(NodelistBuffer(1))
                        CASE ELSE
                                Nodelist.Addr.Node = VAL(NodelistBuffer(1))
                END SELECT

                Nodelist.System = NodelistBuffer(2)
                Nodelist.Location = NodelistBuffer(3)
                Nodelist.Sysop = NodelistBuffer(4)
                Nodelist.Phone = NodelistBuffer(5)
                Nodelist.BPS = NodelistBuffer(6)

                IF NodelistBuffer(7) <> "" THEN
                        NDF$ = NodelistBuffer(7)
                        IF NodelistBuffer(8) <> "" THEN
                                FOR X = 8 TO Options
                                        NDF$ = NDF$ + "," + NodelistBuffer(X)
                                NEXT
                        END IF
                END IF

                Nodelist.Flags = NDF$

                PrintNodelistData 1, 1, Nodelist

                ERASE NodelistBuffer
        END IF
LOOP UNTIL EOF(1) OR INKEY$ <> ""

FUNCTION ExtractAddress$ (Zone, Net, Node)
ExtractAddress$ = RTRIM$(LTRIM$(STR$(Zone))) + ":" + 
RTRIM$(LTRIM$(STR$(Net)))_ + "/" + 
RTRIM$(LTRIM$(STR$(Node)))
END FUNCTION

SUB PrintNodelistData (X, Y, Nodelist AS NodelistType)
LOCATE X, Y
PRINT "    Address: "; ExtractAddress(Nodelist.Addr.Zone, 
Nodelist.Addr.Net, Nodelist.Addr.Node); "      "
PRINT "    ĀRegion: "; RTRIM$(LTRIM$(STR$(Nodelist.Addr.Region)))
PRINT "System name: "; Nodelist.System
PRINT "   Location: "; Nodelist.Location
PRINT "      Sysop: "; Nodelist.Sysop
PRINT "      Phone: "; Nodelist.Phone
PRINT "   BPS Rate: "; Nodelist.BPS
PRINT "      Flags: "; Nodelist.Flags
END SUB
===Chop=== END Nodelist.bas
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++ ===Chop=== BEGIN Parser.bas
DEFINT A-Z
FUNCTION BreakString% (OutArray() AS STRING, InString AS STRING)

ON LOCAL ERROR GOTO HandleError

DIM Char        AS STRING * 1

InString = RTRIM$(InString)
OutArrayPointer = 0
InStrLength = LEN(InString)

FOR Count& = 1 TO InStrLength

        Char = MID$(InString, Count&, 1)
        SELECT CASE Char
                CASE ","
                        OutArrayPointer = OutArrayPointer + 1
                CASE "_"
                        OutArray(OutArrayPointer) = 
OutArray(OutArrayPointer)_ + " "
                CASE ELSE
                        OutArray(OutArrayPointer) = 
OutArray(OutArrayPointer)_ + Char
        END SELECT

NEXT

BreakString = OutArrayPointer
EXIT FUNCTION

HandleError:
BreakString = 0
RESUME ExitFunction

ExitFunction:
END FUNCTION

===Chop=== END Parser.bas

Make the above file into a QLB (or LIB) and load (or LINK) with NODELIST.BAS.

Hope someone finds this usefull.

Coridon Henshaw \ Sirrus Software

--- GEcho 1.00
 * Origin: TCS Concordia - Mail Only - Toronto, Ontario (1:250/820)


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