Help

 BBS: Inland Empire Archive
Date: 01-31-93 (07:59)             Number: 356
From: TOM HAMMOND                  Refer#: NONE
  To: DENIS DUBUC                   Recvd: NO  
Subj: Help                           Conf: (2) Quik_Bas
DD>I would like to know how to the Command for viewing a text file that
   is more then 25 line long by having a thing like press a key to
   continue without having the file scrolling down to the END.The only
   thing that I've been able to do so far is using the | MORE Command,
   but there must be another way to control the text, I checked the 3
   Books that I have but I haven't find anything. Could someone please
   help me?

This may be more than you wanted, but it works GREAT... courtesy of Matt
Hart... who used to frequent this Echo but who had been hiding
recently... too bad, he was a REAL help to us newbies...

NOTE that two (2) lines in the code to follow have been broken (wrapped)
to the next line because they were too long to fit into the editor line
length as-is.  Each broken line has a single underline '_' at its end to
indicate that the text from the NEXT line must be brought UP to THAT
line when you edit the code.  Be sure to REMOVE the underline after
merging the two lines back into one.

BTW, the KeyProcess subroutine is EXCELLENT for other uses.. I keep a
copy of just that code and use it all the time.  It's a great snippet to
learn from.

Good luck - Tom Hammond


' VIEWFILE.BAS  by Matt Hart
' View any size text file without any temporary files.
' Keeps the SEEK position of each line in a long integer array -
' which does limit this to 16,384 lines of text (and makes this
' program easy, small, and fast.)  Key controls are <UpArrow>, <DnArrow>,
' <LtArrow>, <RtArrow>, <PgUp>, <PgDn>, <End>, <Home> and <Esc>.

    '$DYNAMIC
    DEFINT A-Z

    CONST false = 0
    CONST true = NOT false
    CLS

    LINE INPUT "File Name: "; File$

    Escape = false

    OPEN "I", 1, File$
    REDIM Seeks&(1 TO 16384)        ' Max number of lines if 16384
    CurSeek& = 1
    NumLines = 0
    DO UNTIL EOF(1)
        LINE INPUT #1, Text$
        NumLines = NumLines + 1
        Seeks&(NumLines) = CurSeek&          ' Save starting position
        CurSeek& = CurSeek& + LEN(Text$) + 2 ' Next position - 2 is
    LOOP                                     ' for C/R & LF

    CurCol = 1                               ' Current Column
    SeekEl = 1                               ' Current line
    Escape = false

    DO
        GOSUB LoadAndDisplay
        GOSUB KeyProcess
    LOOP UNTIL Escape

    CLOSE 1
    END

LoadAndDisplay:
    SEEK #1, Seeks&(SeekEl)
    FOR i = 1 TO 24
        IF NOT EOF(1) THEN LINE INPUT #1, Text$ ELSE Text$ = ""
        Strg$ = SPACE$(80)
        IF LEN(Text$) < CurCol THEN Text$ = Text$_
 + SPACE$(CurCol - LEN(Text$))
        LSET Strg$ = MID$(Text$, CurCol)
        LOCATE i, 1, 0: PRINT Strg$;
    NEXT i
    RETURN

KeyProcess:
    A$ = INKEY$: IF A$ = "" THEN GOTO KeyProcess
    SELECT CASE A$
        CASE CHR$(27): Escape = true        ' <Esc>
        CASE CHR$(0) + CHR$(72)             ' <UpArrow>
            SeekEl = SeekEl - 1
            IF SeekEl < 1 THEN SeekEl = 1: GOTO KeyProcess
        CASE CHR$(0) + CHR$(80)             ' <DnArrow>
            SeekEl = SeekEl + 1
            IF SeekEl + 23 > NumLines THEN SeekEl = SeekEl - 1:_
 GOTO KeyProcess

    CASE CHR$(0) + CHR$(77)             ' <RtArrow>
            CurCol = CurCol + 1
        CASE CHR$(0) + CHR$(75)             ' <LtArrow>
            CurCol = CurCol - 1
            IF CurCol < 1 THEN CurCol = 1: GOTO KeyProcess
        CASE CHR$(0) + CHR$(73)             ' <PgUp>
            SeekEl = SeekEl - 24
            IF SeekEl < 1 THEN SeekEl = 1
        CASE CHR$(0) + CHR$(81)             ' <PgDn>
            SeekEl = SeekEl + 24
            IF SeekEl > NumLines THEN
                SeekEl = NumLines - 23: GOTO KeyProcess
            END IF
        CASE CHR$(0) + CHR$(71)             ' <Home>
            SeekEl = 1
        CASE CHR$(0) + CHR$(79)             ' <End>
            SeekEl = NumLines - 23
            IF SeekEl < 1 THEN SeekEl = 1: GOTO KeyProcess
        CASE ELSE
            GOTO KeyProcess
    END SELECT
RETURN
---
 * Origin: Night Shift BBS (314)635-7588 HST 14.4 (1:289/15)
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