BBS: Inland Empire Archive Date: 12-27-92 (12:27) Number: 391 From: DIK COATES Refer#: NONE To: CORIDON HENSHAW Recvd: NO Subj: Re: scroll part 3 of 3 Conf: (2) Quik_Bas
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%

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