*.Qwk Packets

 BBS: Inland Empire Archive
Date: 07-25-92 (14:54)             Number: 107
From: MAX VAUGHAN                  Refer#: NONE
  To: CURTIS STRATMAN               Recvd: NO  
Subj: *.Qwk Packets                  Conf: (2) Quik_Bas
Here is a small (very) reader I threw together to read the
messages in the MESSAGES.DAT file in a QWK packet. This should help you
get started with your project. Anyone is welcome to use this as they see
fit. If somebody can show me a faster way to get the text to print to
the screen I would be very grateful. BTW I have Crescents QuickPak Pro
and will try some of the string routines in there to speed things up a
bit. This is very crude but for a quick and dirty reader it works ok.

   --------------CUT HERE------------------------------
DEFINT A-Z
REM
REM  *** QWKREAD V 0.01 (C)1992 Max Vaughan *** 'ignore this
CLS

TYPE InfoBlock                  'Defines info available in message
      MsgStatus AS STRING * 1   'header block for the type array
      MsgNum AS STRING * 7
      Date AS STRING * 8
      Time  AS STRING * 5
      MsgTo AS STRING * 25
      MsgFrom AS STRING * 25

      MsgSubject AS STRING * 25
      MsgPass AS STRING * 12
      MsgRef AS STRING * 8
      MsgBlocks AS STRING * 6
      MsgActive AS STRING * 1
      MsgConf AS INTEGER
      MsgTag AS STRING * 1
 END TYPE

DIM MInfo AS InfoBlock
DIM MText AS STRING * 128

FilePoint! = 129   'First 128byte block is not a message header or
                   'block of text so adjust for that

FileName$ = "MESSAGES.DAT"

OPEN FileName$ FOR BINARY AS #1
Length! = LOF(1)           'Get length of file

DisplayMsg:
CLS
GET #1, FilePoint!, MInfo   'Load in message header block into MInfo array

PRINT "MsgNum:"; MInfo.MsgNum; " Date:"; MInfo.Date; " Time:"; MInfo.Time
PRINT "To: "; MInfo.MsgTo; " From: "; MInfo.MsgFrom
PRINT "Subject-> "; MInfo.MsgSubject; " Conf:"; MInfo.MsgConf
PRINT STRING$(79, "=")
TextBlocks% = VAL(MInfo.MsgBlocks)   'Get number of 128byte text blocks.
GOSUB GetText

GetKey:
PRINT STRING$(79, "=")
PRINT "              PRESS N = Next Message  or  X = EXIT"
DO
A$ = INKEY$
LOOP WHILE A$ = ""
A$ = UCASE$(A$)
SELECT CASE A$
CASE IS = "N"
        FilePoint! = FilePoint! + (TextBlocks% * 128)
        IF FilePoint! > (Length! - (TextBlocks% * 128)) THEN
                BEEP
                PRINT "          End of messages........"
                END
        END IF
        GOTO DisplayMsg
CASE IS = "X"
        END
CASE ELSE
        GOTO GetKey
END SELECT
END

GetText:
LineCount% = 0
A$ = ""
FOR X% = 1 TO TextBlocks%     'Set up to read each Text block
  GET #1, , MText$   'Load first 128byte block of text into MText array

  FOR S% = 1 TO 128           'This allows us to look at each
  MB$ = MID$(MText$, S%, 1)   'of the bytes in the 128byte block
                              'and take action on it accordingly
  SELECT CASE MB$
        CASE IS = CHR$(0)     'ignore any nulls
        CASE IS = CHR$(227)   'Check for QWK messages CR/LF (pi)
                PRINT A$      'and print line of text if there is CR/LF
                A$ = ""       'Reset for the next line to print
                LineCount% = LineCount% + 1
                        IF LineCount% = 20 THEN 'Keep text from scrolling
                                LineCount% = 0  'until it's been read.
                        PRINT "           (Press any key for more....)"
                        DO WHILE INKEY$ = "": LOOP
                        END IF
        CASE ELSE
                A$ = A$ + MB$  'Assemble each line of text to print
  END SELECT
        NEXT S%
NEXT X%
RETURN
END
   --------CUT HERE-----------------------

Another fine example of the KISS method aka Keep It Simple Stupid


 * SLMR 2.1a * Captain Kirk:  We come in peace. Shoot to kill.


--- WM v2.03/91-0012
 * Origin: Com-Dat BBS  Hillsboro, OR.  HST (503) 681-0543 (1:105/314)
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