BBS: Inland Empire Archive Date: 03-15-92 (13:23) Number: 126 From: MICHAEL MALLEY Refer#: NONE To: ROBBIE CHURCH Recvd: NO Subj: Re: Virtual Screen S 1/ Conf: (2) Quik_Bas
RC>Did I miss a virtual screen routine? I've been waiting for this one for
RC>weeks! Could you please repost? Please? Please? (No pressure)
Hmmmmmm... Not sure if Dave Cleary is going to include it in the QBNews
or not. Well O.K.
----------------------[ VIRTUAL.BAS ]-----------------------
DECLARE SUB Scroll (Row1%, Col1%, Row2%, Col2%, Lines%, attr%)
DEFINT A-Z
'-- We need the following type and declaration for accessing the BIOS scroll
' screen function. You'll have to load QB.QLB/QBX.QLB for this.
TYPE RegType
ax AS INTEGER
bx AS INTEGER
cx AS INTEGER
dx AS INTEGER
bp AS INTEGER
si AS INTEGER
di AS INTEGER
flags AS INTEGER
END TYPE
DECLARE SUB Interrupt (intnum AS INTEGER, Inreg AS RegType, outreg AS_
RegType)
'-- You need to have an array containing the text for the screen
' If we diminsion it as string, that will allow for variable
' lengths without wasting memory. We are going to use ASCII
' codes of 32 to 255 as our virtual text.
DIM Text(1 TO 224) AS STRING
TopLine = 1 'Pointer shows what element is the top line
NumberOfLines = 23 'Number of rows to show at one time
CurrentCol = 1 'What "column" to start at in the element
COLOR 7, 0
CLS
LOCATE , , 0 'Turn off the cursor
'Let's make some stuff to show on the screen
Text(1) = SPACE$(224)
FOR Counter = 32 TO 255
MID$(Text(1), Counter - 31) = CHR$(Counter)
NEXT Counter
Offset = 2
FOR Counter = 2 TO 224
Text(Counter) = SPACE$(224)
MID$(Text(Counter), 1) = MID$(Text(1), Offset)
NextPosition = 225 - (Offset - 1)
MID$(Text(Counter), NextPosition) = LEFT$(Text(1), (Offset - 1))
Offset = Offset + 1
NEXT Counter
GOSUB ShowScreen
DO
WHILE LEN(INKEY$): WEND 'Clear keyboard buffer
DO
KeyStroke$ = INKEY$
LOOP UNTIL LEN(KeyStroke$)
IF LEN(KeyStroke$) = 2 THEN
SELECT CASE ASC(RIGHT$(KeyStroke$, 1))
CASE 72 'Up
TopLine = TopLine - 1
IF TopLine THEN
Scroll 2, 1, 24, 80, -1, 7
LOCATE 2, 1
PRINT MID$(Text(TopLine), CurrentCol, 80);
ELSE
TopLine = 1
END IF
CASE 80 'Down
TopLine = TopLine + 1
IF TopLine < 203 THEN
Scroll 2, 1, 24, 80, 1, 7
LOCATE 24, 1
PRINT MID$(Text(TopLine + 22), CurrentCol, 80);
ELSE
TopLine = 202
END IF
CASE 75 'Left
CurrentCol = CurrentCol - 1
IF CurrentCol THEN
GOSUB ShowScreen
ELSE
CurrentCol = 1
END IF
CASE 77 'Right
CurrentCol = CurrentCol + 1
IF CurrentCol < 146 THEN
GOSUB ShowScreen
ELSE
CurrentCol = 145
END IF
CASE 71 'Home
CurrentCol = CurrentCol - 1
IF CurrentCol THEN
TopLine = TopLine - 1
IF TopLine THEN
GOSUB ShowScreen
ELSE
TopLine = 1
END IF
ELSE
CurrentCol = 1
END IF
CASE 79 'End
CurrentCol = CurrentCol - 1
IF CurrentCol THEN
TopLine = TopLine + 1
IF TopLine < 203 THEN
GOSUB ShowScreen
ELSE
TopLine = 202
END IF
ELSE
CurrentCol = 1
END IF
CASE 73 'Page Up
CurrentCol = CurrentCol + 1
IF CurrentCol < 146 THEN
TopLine = TopLine - 1
IF TopLine THEN
GOSUB ShowScreen
ELSE
TopLine = 1
END IF
ELSE
CurrentCol = 145
END IF
CASE 81 'Page Down
CurrentCol = CurrentCol + 1
>>> Continued to next message
* SLMR 2.1a * It's not crippled, it's functionally challenged!

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