Area: Quik_Bas Msg: #391 Date: 12-27-92 12:27 (Public) From: Dik Coates To: Coridon Henshaw Subject: Re: scroll part 3 of 3
This is the last of the installments... Part 3 of 3
- - - - - - - - - - - - Cut on Dashed Line - - - - - - - - - - - - -
'****************************************************** SUBPROGRAM ScrollText
'
' Procedure prints to screen WARNING MESSAGES returned from the various
' program screens. The messages if greater in number than the permitted
' number of lines on the screen can be scrolled down and up for viewing.
'
' CALL: ScrollText (a$(), srow%, scol%, frow%, fcol%, txtfga%, txtbga%,
' tartln%)
'
' ARG: a$() - text array to be printed to screen
' srow% - start row of the active screen area
' scol% - start column of the active screen area
' frow% - end row of the active screen area
' fcol% - end column of the active screen area
' txtfga% - text foreground attribute
' txtbga% - text background attribute
' startln%- starting line of the text array to be printed
'
' USES: ClearScrollText()
' ScrollDn()
' ClearScrollLine()
' ScrollUp()
'
' COMP: MS Basic 7.1
'
' REV: 91-03-23
' 91-11-14 header revised
'
'****************************************************************************
'
SUB ScrollText (a$(), srow%, scol%, frow%, fcol%, textfga%,
textbga%, startln%)
COLOR textfga%, textbga%
scrwidth% = fcol% - scol% + 1
linesperscreen% = frow% - srow% + 1 'OK
lenoffile% = UBOUND(a$, 1) 'OK
IF linesperscreen% >= lenoffile% THEN 'single screen
CALL ClearScrollText(srow%, scol%, frow%, fcol%, textfga%, textbga%)
FOR c% = 1 TO lenoffile% 'print screen
LOCATE srow% - 1 + c%, scol%
PRINT a$(c%);
NEXT c%
DO 'exit single screen on escape only
DO
key$ = INKEY$
LOOP UNTIL LEN(key$)
IF LEN(key$) = 2 THEN
BEEP
ELSEIF LEN(key$) = 1 THEN
IF ASC(key$) = 27 THEN
EXIT SUB
ELSE
BEEP
END IF
END IF
LOOP
ELSE 'multiple screens
maxtoprow% = lenoffile% - linesperscreen% + 1 'OK initialize
IF startln% + linesperscreen% > lenoffile% THEN
oldtoprow% = maxtoprow%
oldbotrow% = lenoffile%
ELSE
oldtoprow% = startln%
oldbotrow% = startln% + linesperscreen% - 1
END IF
FOR c% = 1 TO linesperscreen% 'print screen
LOCATE srow% - 1 + c%, scol%
PRINT a$(oldtoprow% - 1 + c%);
NEXT c%
DO
DO
key$ = INKEY$
LOOP UNTIL LEN(key$)
IF LEN(key$) = 2 THEN
temp% = ASC(RIGHT$(key$, 1))
SELECT CASE temp%
CASE 71 'home
scrollflag% = 0
oldtoprow% = 1
oldbotrow% = linesperscreen%
CASE 72 AND oldbotrow% <= linesperscreen% 'cursor up
scrollflag% = 2
CASE 72 AND oldbotrow% > linesperscreen%
scrollflag% = 1
oldtoprow% = oldtoprow% - 1
oldbotrow% = oldbotrow% - 1
CASE 73 AND oldtoprow% <= linesperscreen% 'page up
scrollflag% = 0
oldtoprow% = 1
oldbotrow% = linesperscreen%
CASE 73 AND oldtoprow% > linesperscreen%
scrollflag% = 0
oldtoprow% = oldtoprow% - linesperscreen%
oldbotrow% = oldbotrow% - linesperscreen%
CASE 79 'end
scrollflag% = 0
oldtoprow% = maxtoprow%
oldbotrow% = lenoffile%
CASE 80 AND oldtoprow% < maxtoprow% 'cursor down
scrollflag% = -1
oldtoprow% = oldtoprow% + 1
oldbotrow% = oldbotrow% + 1
CASE 80 AND oldtoprow% = maxtoprow%
scrollflag% = 2
CASE 81 AND oldbotrow% >= maxtoprow%'page down
scrollflag% = 0
oldtoprow% = maxtoprow%
oldbotrow% = lenoffile%
CASE 81 AND oldbotrow% < maxtoprow%
scrollflag% = 0
oldtoprow% = oldtoprow% + linesperscreen%
oldbotrow% = oldbotrow% + linesperscreen%
CASE ELSE
BEEP
END SELECT
IF scrollflag% = 1 THEN 'movement up
CALL ScrollDn(srow%, scol%, frow%, fcol%, 1, textbga%)
CALL ClearScrollLine(srow%, scol%, fcol%, textfga%, textbga%)
LOCATE srow%, scol%
PRINT a$(oldtoprow%);
ELSEIF scrollflag% = -1 THEN 'movement down
temp% = srow% + linesperscreen% - 1
CALL ScrollUp(srow%, scol%, frow%, fcol%, 1, textbga%)
CALL ClearScrollLine(temp%, scol%, fcol%, textfga%, textbga%)
LOCATE temp%, scol%
PRINT a$(oldbotrow%);
ELSEIF scrollflag% = 0 THEN 'print screen
CALL ClearScrollText(srow%, scol%, frow%, fcol%, textfga%, textbga%)
FOR c% = 1 TO linesperscreen%
LOCATE srow% - 1 + c%, scol%
PRINT a$(oldtoprow% - 1 + c%);
NEXT c%
END IF
scrollflag% = 0
ELSE
temp% = ASC(key$)
SELECT CASE temp%
CASE 27 'escape
EXIT SUB
CASE ELSE
BEEP
END SELECT
END IF
LOOP
END IF
END SUB 'ScrollText
'********************************************************* SUB TextFile2Array
'
' The procedure copies a BINARY text file to a string array. The format of
' binary file is: (size%, LENstring1%, string1$, LENstring2%, string2$,...)
' Error handling must be done in the calling program.
'
' CALL: TextFile2Array (filename$, a$())
'
' ARG: filename$ - name of the BINARY file to be copied
'
' RET: a$() - string array containing contents of binary file
'
' COMP: MS Basic 7.1
'
' REV: 91-10-30
'
'****************************************************************************
'
SUB TextFile2Array (filename$, a$())
filenum% = FREEFILE
OPEN filename$ FOR BINARY AS filenum%
GET filenum%, , size%
REDIM a$(size%)
FOR c% = 1 TO size%
GET filenum%, , dummy%
a$(c%) = INPUT$(dummy%, filenum%)
NEXT c%
CLOSE filenum%
-end-

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