nodelist.bas

 BBS: Inland Empire Archive
Date: 02-15-93 (16:44)             Number: 355
From: QUINN TYLER JACKSON          Refer#: NONE
  To: ALL                           Recvd: NO  
Subj: nodelist.bas                   Conf: (2) Quik_Bas
'QBS:           Yes
'NAME:          NODELIST.BAS
'DESC:          Nodelist reader and compiler
'DIALECT:       PDS 7.1 or VBDOS 1.0
'AUTHOR:        Quinn Tyler Jackson  13 Feb 1993
'       (With great thanks to Coridon Henshaw's original NODELIST.BAS)
'               (My version is 10 times faster than his was.)
'$DYNAMIC


DEFINT A-Z
TYPE NodelistType
        Zone            AS INTEGER
        Region          AS INTEGER
        Net             AS INTEGER
        Node            AS INTEGER
        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

CONST ENTRY_BUFFER = 256
CONST DATA_FIELDS = 8

DIM SHARED BufferPtr AS INTEGER

CLS
ParseNodelist "NODELIST.022", "NODELIST.DBF"

REM $STATIC
FUNCTION BreakString% (OutArray() AS STRING * 50, InString AS STRING)

ON LOCAL ERROR GOTO HandleError

Ptr = 1
DO
     Comma = INSTR(Ptr, InString, ",")
     OutArray(OutArrayPtr) = MID$(InString, Ptr, (Comma - Ptr))
     Ptr = Comma + 1
     OutArrayPtr = OutArrayPtr + 1
     IF OutArrayPtr = 7 THEN
        OutArray(7) = MID$(InString, Ptr)
        EXIT DO
     END IF
LOOP UNTIL Comma = 0

BreakString = OutArrayPtr
EXIT FUNCTION

HandleError:
'BreakString = 0
RESUME ExitFunction

ExitFunction:

END FUNCTION

STATIC SUB FlushBuffers (FlushFileHandle, NodeList() AS NodelistType)

FOR Ptr = 0 TO BufferPtr

    RecNum = RecNum + 1
    PUT #FlushFileHandle, RecNum, NodeList(Ptr)

NEXT Ptr

REDIM NodeList(0 TO ENTRY_BUFFER) AS NodelistType
BufferPtr = 0

END SUB

SUB ParseNodelist (NodelistFile AS STRING, ParsedListFile AS STRING)

StartTime! = TIMER
IF DIR$(ParsedListFile) <> "" THEN
    KILL ParsedListFile
END IF

'$STATIC
DIM NodelistBuffer(0 TO 7) AS STRING * 50
DIM NodeList(0 TO ENTRY_BUFFER) AS NodelistType
'$DYNAMIC

BufferPtr = 0

NodelistHandle = FREEFILE
OPEN NodelistFile FOR INPUT AS NodelistHandle LEN = 1024
ParsedListHandle = FREEFILE
OPEN ParsedListFile FOR RANDOM AS ParsedListHandle LEN = LEN(NodeList(0))

DO
        LINE INPUT #NodelistHandle, Buffer$

                Options = BreakString(NodelistBuffer(), Buffer$)

                SELECT CASE LEFT$(Buffer$, 1)
                        CASE "Z"
                                TempZone = VAL(NodelistBuffer(1))
                        CASE "R"
                                TempRegion = VAL(NodelistBuffer(1))
                        CASE "H"
                                SELECT CASE LEFT$(Buffer$, 3)
                                    CASE "Hos"
                                        TempNet = VAL(NodelistBuffer(1))
                                    CASE "Hub"
                                        TempNode = VAL(NodelistBuffer(1))
                                END SELECT
                        CASE ","
                                TempNode = VAL(NodelistBuffer(1))
                        CASE ELSE
                            GOTO JumpPast
                END SELECT

                NodeList(BufferPtr).Zone = TempZone
                NodeList(BufferPtr).Region = TempRegion
                NodeList(BufferPtr).Net = TempNet
                NodeList(BufferPtr).Node = TempNode
                NodeList(BufferPtr).System = NodelistBuffer(2)
                NodeList(BufferPtr).Location = NodelistBuffer(3)
                NodeList(BufferPtr).Sysop = NodelistBuffer(4)
                NodeList(BufferPtr).Phone = NodelistBuffer(5)
                NodeList(BufferPtr).BPS = NodelistBuffer(6)
                NodeList(BufferPtr).Flags = NodelistBuffer(7)

                REDIM NodelistBuffer(0 TO 7) AS STRING * 50

BufferPtr = BufferPtr + 1

IF BufferPtr = ENTRY_BUFFER THEN
    FlushBuffers ParsedListHandle, NodeList()
END IF

JumpPast:
LOOP UNTIL EOF(NodelistHandle)

FlushBuffers ParsedListHandle, NodeList()
PRINT INT(TIMER - StartTime! + .5); "seconds."

END SUB

 * SLMR 2.1a *

--- Maximus 2.01wb
 * Origin: VKUG/VPCC QuickBasic Echo - Richmond, BC (1:153/151)
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